0

2MB ブロックで ~280MB のデータを FileStream に書き込んでいます。

1 台のマシンでは、これは 8 秒未満で完了します。私のマシン(同様の仕様、SSDなど)で、なぜ40秒以上かかり、進行中の一時停止なのかをデバッグしようとしています。

ハードウェア デバイスから返されたときにデータを書き込みますが、ストリームで Write を呼び出すと返されるまでに時間がかかる場合があることがわかりました。すべての書き込みの間にフラッシュを呼び出しています:

    Stopwatch stopwatch = Stopwatch.StartNew();
    _stream.Write(buffer, 0, buffer.Length);        
    stopwatch.Stop(); 
    Console.WriteLine("_stream.Write() " + stopwatch.ElapsedMilliseconds + "ms");             

    _stream.Flush(); 

出力:

_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 2ms
... snip 
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 23233ms    <- not expecting this
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 0ms
... snip 
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 15852ms    <- or this
_stream.Write() 2ms
_stream.Write() 2ms
_stream.Write() 2ms
... snip 
_stream.Write() 2ms
_stream.Write() 25ms
_stream.Write() 2ms
_stream.Write() 2ms

これは私が期待するものではありません

4

2 に答える 2

2

私は実際、あなたがそれを速くするべきだと思っているのではないかと疑っています。SSDが原因である可能性があります。

それで、ここに奇妙なことがあります。.net のような SSD には GC があります。これは、SSD は HDD とは異なり、情報を書き込むのと同じ方法で情報を削除できないためです。書き込みの最小単位は、削除の最小単位よりもはるかに小さいです。

詳細については、書き込み増幅を検索してください。

業界はこれを知っていたので、TRIM と呼ばれる SATA の機能を開発しました。しかし、私の調査によると、何らかの奇妙な理由でファームウェアで TRIM が無効になっている Corsair Force 3 のバッチがあったことがわかりました...

于 2013-02-08T18:02:16.340 に答える
1

いつでも非同期スレッドで書き込みを実行し、書き込みプロセスが完了したときにコールバックすることができますか?

于 2013-02-11T11:14:48.137 に答える