Bir dosyaya büyük miktarda veri < 2GB yazdığımda bir sorunum var. İlk ~ 1.4GB veri kodun gerçekten yavaş (0-2 MB/s) daha hızlı (100 MB/s) yazılmıştır.Dosyaya önbellekleme sorunu için büyük veri yazın
Kodum (basitleştirilmiş) 'dir:
//FileOptions FILE_FLAG_NO_BUFFERING = (FileOptions)0x20000000;
FileOptions fileOptions = FileOptions.SequentialScan;
int fileBufferSize = 1024 * 1024;
byte[] Buffer = new byte[32768];
Random random = new Random();
long fileSize = 2588490188;
long totalByteWritten = 0;
using (FileStream fs = File.Create(@"c:\test\test.bin", fileBufferSize, fileOptions))
{
while (totalByteWritten < fileSize)
{
random.NextBytes(Buffer);
fs.Write(Buffer, 0, Buffer.Length);
totalByteWritten += Buffer.Length;
//Thread.Sleep(10);
}
}
Orada düşünüyorum RAM kullanımı durağı artırmak için ne zaman "hızlı yazma performansı" RAM yanı artış kullanılan sırasında aslında, önbelleğe alma sorunla ilgili bir konudur performans düşüşüdür.
denedim Ne:
değişim zaman uyumsuz yazma için -> hiçbir anlamlı
değişikliği
fileBufferSize
değiştirmek -> hiçbir anlamlı değişiklik dizisi tampon boyutu- değiştirmek - > önemli bir değişiklik yok, ancak büyük bir arabellekle ~ 100MB, yazma performansı hızlı ve RAM kullanımı durduğunda, yazma p performansı alabilirsiniz 0'a gider ve bir süre sonra geri 100MB gider yerine, ön arabellek
değişiklik
fileOption
-WriteThrough
"kızarmış" olduğunu dikişler -> performans her zaman yavaş ..sonra ekleme xx
fs.Flush(true)
döngüler -> hiçbir anlamlı bir değişiklikyorumsuz
Thread.Sleep(10)
-> yazma hızı ..... bu garip her zaman iyidir edilir
thread.sleep belleğin temizlenmesini ve diske dökülmesine yardımcı oluyor gibi görünüyor. hd yazma hızınızın bir kıyaslamasını yapabilir misiniz? Başta her şey belleğe yazılıncaya kadar dolu olduğunu ve daha sonra hem windows disk belleği dosyasının yazıldığını (hem de belleği kapladığından beri) yazdığınızı ve dosyanızın yazmaya devam ettiğini, dolayısıyla performansın azaldığını düşünüyorum. ama yanılıyor olabilirim :) – Dementic
Sistem üzerinde çalışan ve RAM dolduğunda performansı yavaşlatan ve veri diske yazmaya başlayan bazı virüsten koruma yazılımı var mıdır? –
Hm, ''FileOptions.SequentialScan' 'anlayışımın hiçbirinin sizin senaryoda hiç bir faydası yoktur. Diskin yazmadan * okunması * bu önemli olacaktır. Anladığım kadarıyla, bu sadece basitleştirilmiş bir kod snippet'idir, bu yüzden ´random.NextBytes´ gerçek veriler için sadece bir yer tutucudur. Gerçek veriler nereden geliyor? Gerçek verileri toplamak suçlu olabilir mi? –