BufferedStream.WriteByte(Byte) 내부 버퍼가 가득 차면 메서드가 더 이상 암시적 플러시를 수행하지 않습니다. 이 변경은 BufferedStream.WriteByte 클래스의 Write 메서드 BufferedStream의 동작을 암시적 플러시를 수행하지 않는 BufferedStream.Write(Byte[], Int32, Int32) 및 BufferedStream.WriteAsync(Byte[], Int32, Int32, CancellationToken)와 같은 다른 메서드와 일치시킵니다.
도입된 버전
.NET 10
이전 동작
이전에는 내부 버퍼가 가득 찼을 BufferedStream 때 호출 WriteByte 이 자동으로 버퍼를 기본 스트림으로 플러시했습니다. 이 동작은 .의 Write다른 BufferedStream 메서드와 일치하지 않습니다.
다음 예제에서는 이전 동작을 보여 줍니다.
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
새 동작
.NET 10부터 내부 버퍼가 WriteByte 가득 찼을 때 메서드는 더 이상 암시적 플러시를 수행하지 않습니다. 버퍼는 BufferedStream.Flush() 메서드가 명시적으로 호출되거나 BufferedStream가 삭제될 때만 플러시됩니다.
파괴적 변경 유형
이 변경은 동작 변경입니다.
변경 이유
암시적 플러시 동작이 BufferedStream.WriteByte(Byte) 클래스의 다른 Write 메서드(BufferedStream 및 Write 등)와 일치하지 않았습니다. 이러한 불일치로 인해 플러시 작업에 중요한 스트림을 사용할 때 예기치 않은 성능 문제 또는 의도하지 않은 부작용이 발생할 수 있습니다. 암시적 플러시를 제거하면 Write의 모든 메소드에서 일관된 동작이 보장됩니다.
권장 작업
애플리케이션이 암시적 플러시 동작 BufferedStream.WriteByte을 사용하는 경우 필요할 때 메서드를 명시적으로 호출 Flush 하도록 코드를 업데이트합니다. 다음은 그 예입니다.
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
영향을 받는 API
.NET