Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
BufferedStream.WriteByte(Byte) yöntemi, iç arabellek dolduğunda artık otomatik temizleme gerçekleştirmez. Bu değişiklik, BufferedStream.WriteByte öğesinin davranışını, örtük temizleme gerçekleştirmeyen Write sınıfındaki BufferedStream yöntemleri gibi BufferedStream.Write(Byte[], Int32, Int32) ve BufferedStream.WriteAsync(Byte[], Int32, Int32, CancellationToken) yöntemleriyle hizalar.
Sürüm kullanıma sunulmuştur
.NET 10
Önceki davranış
Daha önce, bir BufferedStream iç arabelleği dolduğunda, WriteByte çağrıldığında arabelleği temel alınan akışa otomatik olarak boşaltıyordu. Bu davranış, içindeki Writediğer BufferedStream yöntemlerle tutarsızdı.
Aşağıdaki örnekte önceki davranış gösterilmektedir:
StreamWithFlush streamWithFlush = new();
BufferedStream bufferedStream = new(streamWithFlush, bufferSize: 4);
// Write 4 bytes to fill the buffer
bufferedStream.WriteByte(1);
bufferedStream.WriteByte(2);
bufferedStream.WriteByte(3);
bufferedStream.WriteByte(4); // In .NET 9 and earlier, this caused an implicit flush
class StreamWithFlush : MemoryStream
{
public override void Flush()
{
Console.WriteLine("Flush was called.");
base.Flush();
}
}
Module PreviousBehaviorExample
Sub Example()
Dim streamWithFlush As New StreamWithFlush()
Dim bufferedStream As New BufferedStream(streamWithFlush, bufferSize:=4)
' Write 4 bytes to fill the buffer
bufferedStream.WriteByte(1)
bufferedStream.WriteByte(2)
bufferedStream.WriteByte(3)
bufferedStream.WriteByte(4) ' In .NET 9 and earlier, this caused an implicit flush
End Sub
Class StreamWithFlush
Inherits MemoryStream
Public Overrides Sub Flush()
Console.WriteLine("Flush was called.")
MyBase.Flush()
End Sub
End Class
End Module
Yeni davranış
.NET 10'dan başlayarak, WriteByte yöntemi dâhili arabellek dolduğunda artık örtük bir temizleme gerçekleştirmez. Arabellek yalnızca BufferedStream.Flush() yöntemi açıkça çağrıldığında veya BufferedStream yok edildiğinde boşaltılır.
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
BufferedStream.WriteByte(Byte) öğesinin örtük temizleme davranışı, Write sınıfındaki BufferedStream gibi Write ve WriteAsync yöntemleriyle tutarlı değildi. Bu tutarsızlık, temizleme işlemlerine duyarlı akışlarla çalışırken beklenmeyen performans sorunlarına veya istenmeyen yan etkilere neden olabilir. Örtük boşaltmanın kaldırılması, Write içindeki tüm BufferedStream yöntemleri arasında tutarlı davranış sağlar.
Önerilen eylem
Uygulamanız BufferedStream.WriteByte'ün örtük temizleme davranışına bağlıysa, gerektiğinde Flush yöntemini açıkça çağırmak için kodunuzu güncelleyin. Örneğin:
Before:
BufferedStream bufferedStream = new(new MemoryStream(), bufferSize: 4);
bufferedStream.WriteByte(1);
bufferedStream.WriteByte(2);
bufferedStream.WriteByte(3);
bufferedStream.WriteByte(4); // Implicit flush occurred here in .NET 9 and earlier
Dim bufferedStream As New BufferedStream(New MemoryStream(), bufferSize:=4)
bufferedStream.WriteByte(1)
bufferedStream.WriteByte(2)
bufferedStream.WriteByte(3)
bufferedStream.WriteByte(4) ' Implicit flush occurred here in .NET 9 and earlier
After:
BufferedStream bufferedStream = new(new MemoryStream(), bufferSize: 4);
bufferedStream.WriteByte(1);
bufferedStream.WriteByte(2);
bufferedStream.WriteByte(3);
bufferedStream.WriteByte(4);
bufferedStream.Flush(); // Explicit flush
Dim bufferedStream As New BufferedStream(New MemoryStream(), bufferSize:=4)
bufferedStream.WriteByte(1)
bufferedStream.WriteByte(2)
bufferedStream.WriteByte(3)
bufferedStream.WriteByte(4)
bufferedStream.Flush() ' Explicit flush