2011-08-18 89 views
0

我使用_FileStream.Write(_ByteArray, 0, _ByteArray.Length);將文件寫入一個字節陣列。我注意到這很慢。 我從文本文件讀取一行,將其轉換爲bytearray,然後需要將其寫入新的(大於500 Mb)文件。請提供一些建議以加快寫入過程。將文件快速寫入文件

+2

Define slow?讀取和寫入單獨的磁盤,使用SSD。 –

+1

我建議稍微詳細一點。它在哪裏慢 - 寫入文件,轉換爲bytearray,或者你不知道,因爲你沒有分開這些。我建議你放一點代碼。 – iandotkelly

+0

所以......你一次只讀一行,將其轉換爲一個字節數組,然後將這些字節寫入另一個文件?你在做什麼與OS文件複製操作不同? – Cameron

回答

1

FileStream.Write基本上就是這樣。這是可能使用BufferedStream會有所幫助,但不太可能。

如果你是確實讀取一行文本,當編碼時,它是500MB,然後我不會驚訝地發現大部分時間都花費在執行編碼上。你應該能夠通過編碼來測試,然後扔掉結果。

假設「編碼」你表演只是Encoding.GetBytes(string),則可能需要使用StreamWriter包住FileStream嘗試 - 它可以像重複編碼同一數組寫入文件之前,更好地工作,通過技巧。

如果你實際上每次讀一本線和追加,要的文件,然後:

  • 顯然,這是最好的,如果你在整個操作過程都保持輸入流和輸出流開。不要反覆閱讀,然後寫。

  • 可能使用多線程或可能異步IO獲得更好的性能。這部分取決於你是否正在讀寫同一個驅動器。

  • 使用StreamWriter可能仍然是一個好主意。

此外創建文件時,您可能想看看使用它接受FileOptions構造。試用可用的選項,但我懷疑你會想要SequentialScan可能WriteThrough

+0

文本文件中的每一行都包含一個純文本值(32個字符)。我一次只讀一行,使用Encoding.GetBytes(string)將每個值轉換爲一個字節數組,然後將字節寫入新文件(導入另一個應用程序)。爲這兩個文件打開關閉一次。如果我使用StreamWriter寫成「文本」,它會更快。 –

+0

_FileStream = new FileStream(fileName,FileMode.Append,FileAccess.Write); –

+0

@Robertico:對 - 在這種情況下,我建議你使用StreamWriter :)爲什麼你不*使用StreamWriter,因爲它爲你編碼? –

0

如果你只寫了字節數組,你試過用BinaryWriter的Write方法嗎?批量寫作也可能有助於提高速度。也許你可以閱讀每一行,將字符串轉換爲字節,將這些字節存儲爲將來的寫入操作(即在List中或某事中),並且每隔一段時間(在讀取x行後)將大塊寫入磁盤。

BinaryWriter:http://msdn.microsoft.com/en-us/library/ms143302.aspx