ReadAsync veya WriteAsync tamamlandıktan sonra FileStream.Position güncelleştirmeleri
FileStream.Position artık veya tamamlandıktan sonra ReadAsyncWriteAsync güncelleştirilir.
Açıklama değiştirildi
Windows'un önceki .NET sürümlerinde, FileStream.Position zaman uyumsuz okuma veya yazma işlemi başlatıldıktan sonra güncelleştirildi. .NET 6'dan FileStream.Position başlayarak iyimser bir şekilde güncelleştirilir:
- Başladıktan sonra WriteAsync , ancak işlem başarısız olursa veya iptal edilirse, konum düzeltilir.
- Başlatıldığında ReadAsync , ancak tüm arabellek okunmazsa, işlem tamamlandıktan sonra konum düzeltilir.
Sürüm kullanıma sunulmuştur
.NET 6
Değişiklik nedeni
FileStream hiçbir zaman iş parçacığı güvenli olmamıştı, ancak .NET 6'ya kadar .NET, Windows'da zaman uyumsuz yöntemlerine (ReadAsync ve WriteAsync) yönelik birden çok eşzamanlı çağrıyı desteklemeye çalıştı.
Bu değişiklik ile %100 zaman uyumsuz dosya G/Ç'sine FileStream izin vermek ve aşağıdaki sorunları çözmek için kullanıma sunulmuştur:
- FileStream.FlushAsync zaman uyumlu yazma işlemleri yapıyor
- Win32 Dosya Akışı zaman uyumsuz okumaları eşitleme okumalarına dönüştürür
Önerilen eylem
Kodunuz paralel okuma veya yazma işlemleri gerçekleştirdiğinden okuma veya yazma başlamadan önce ayarlanmasına güveniyorsanızFileStream.Position, bunun yerine API'yi kullanmaya System.IO.RandomAccess geçmeniz gerekir. RandomAccess API, paralel dosya işlemleri için tasarlanmıştır.
.NET 6'da .NET 5 davranışını etkinleştirmek için bir
AppContext
anahtar veya ortam değişkeni belirtin. anahtarını olaraktrue
ayarlayarak .NET 6'da yapılanFileStream
tüm performans geliştirmelerini geri çevirmiş olursunuz.{ "configProperties": { "System.IO.UseNet5CompatFileStream": true } }
set DOTNET_SYSTEM_IO_USENET5COMPATFILESTREAM=1
Önemli
Bu anahtar yalnızca .NET 6'da kullanılabilir. .NET 7'de kaldırıldı.