2011-08-18 88 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