Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A BufferedStream.WriteByte(Byte) metódus már nem végez implicit öblítést, ha a belső puffer megtelt. Ez a módosítás igazodik az osztály BufferedStream.WriteByte más Write metódusaihoz, például BufferedStream és BufferedStream.Write(Byte[], Int32, Int32), amelyek nem végeznek implicit öblítést.
Bevezetett verzió
.NET 10
Előző viselkedés
Korábban, amikor egy BufferedStream belső puffer megtelt, a WriteByte hívása automatikusan ürítette a puffert a mögöttes adatfolyamba. Ez a viselkedés inkonzisztens volt a többi Write metódusokkal BufferedStream.
Az alábbi példa az előző viselkedést mutatja be:
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
Új viselkedés
A .NET 10-től kezdődően a WriteByte metódus már nem végez implicit kiürítést, ha a belső puffer megtelt. A puffert csak akkor üríti ki a rendszer, ha a BufferedStream.Flush() metódust kifejezetten meghívják, vagy ha a BufferedStream rendszer megsemmisíti.
A kompatibilitástörő változás típusa
Ez a változás viselkedésbeli változás.
A változás oka
Az implicit kiürítési BufferedStream.WriteByte(Byte) viselkedés inkonzisztens volt az Write osztály más BufferedStream metódusaival, például a Write és WriteAsync. Ez az inkonzisztencia váratlan teljesítményproblémákhoz vagy nem várt mellékhatásokhoz vezethet a kiürítési műveletekre érzékeny streamek használatakor. Az implicit kiürítés eltávolítása biztosítja a konzisztens viselkedést az összes Write metódusban a BufferedStream-ben.
Javasolt művelet
Ha az alkalmazás az implicit kiürítési BufferedStream.WriteByteviselkedésre támaszkodik, frissítse a kódot, hogy szükség esetén explicit módon hívja meg a metódust Flush . Például:
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