2013-02-08 41 views
0

我正在將2MB塊中的〜280MB數據寫入FileStream。FileStream.Write在SSD上長時間阻塞

在一臺機器上,這在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 

這不是我所期望的

+0

事件查看器中的任何錯誤?對我來說似乎是硬件問題。 – MiMo 2013-02-08 14:10:08

+1

我將不得不第二次MiMo的評論。聽起來像是一個硬件問題。 – JosephHirn 2013-02-08 14:15:45

+0

完整的文件系統緩存很容易解釋這一點。購買更多的RAM。 – 2013-02-08 14:43:21

回答

2

其實我懷疑這也許是你認爲應該使之快。 SSD可能是罪魁禍首。

所以這裏有什麼奇怪的。 SSD如.net有GC。這是因爲與HDD不同的SSD不能以與寫入信息相同的方式刪除信息。寫入的最小單位比刪除的最小單位小得多。

欲瞭解更多信息搜索寫放大。

業界知道這個,所以他們開發了一個名爲TRIM的SATA功能。但是我的研究表明,有一批Corsair Force 3在固件中出於某種奇怪的原因禁用了TRIM ...

+0

我無法更新SSD上的固件,因爲它顯示爲我的X79主板上的SCSI設備。我將它從Marvel 6G SATA端口換成Intel 6G SATA端口,然後顯示爲AHCI設備。然後我從1.5> 5.02更新了SSD固件,並且長時間停頓已經停止! – Tim 2013-02-11 13:19:19

1

您可以隨時在異步線程上運行寫入,並且只需在寫入過程中執行回調完成?

相關問題