如何创建大尺寸.text文件?

时间:2012-03-12 03:20:26

标签: c# .net

出于某些原因,我必须创建一个1024 kb的.txt文件。

以下是我目前的代码:

int size = 1024000 //1024 kb..


byte[] bytearray = new byte[size];
foreach (byte bit in bytearray) 
{
     bit = 0;
}


string tobewritten = string.Empty;
foreach (byte bit in bytearray) 
{
     tobewritten += bit.ToString();
}


//newPath is local directory, where I store the created file
using (System.IO.StreamWriter sw = File.CreateText(newPath))
{
     sw.WriteLine(tobewritten);
}

我必须等待至少30分钟才能执行这段代码,我认为这段代码太长了。

现在,我想就如何有效地实现我提到的目标征求意见。有没有其他选择来完成这项任务?我写错了代码吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

将字符串替换为预先设置的StringBuilder,以避免不必要的分配。

或者,更好的是,将每个部分直接写入StreamWriter,而不是毫无意义地构建一个100MB的内存中的字符串。

答案 1 :(得分:4)

您提供的代码存在一些误解:

byte[] bytearray = new byte[size];
foreach (byte bit in bytearray) 
{
     bit = 0;
}

您似乎认为您正在使用零初始化数组bytearray中的每个字节。相反,您只需将循环变量bit(不幸的命名)设置为零size次。实际上这个代码甚至不会编译,因为你不能分配给foreach迭代变量。

此外,您首先不需要初始化:字节数组元素自动初始化为0。

string tobewritten = string.Empty;
foreach (byte bit in bytearray) 
{
     tobewritten += bit.ToString();
}

您希望将数组中每个字节的字符串表示形式组合为字符串变量tobewritten。由于字符串是不可变的,因此为每个必须进行垃圾收集的元素创建一个 new 字符串以及为bit创建的字符串,这相对较贵,尤其是当您创建时2048000 其中之一 - 改为使用Stringbuilder

最后,根本不需要所有这些 - 似乎你只想在文本文件中写一堆“0”字符 - 如果你不担心创建一个大的零字符串(它取决于size的值是否有意义)你可以just create the string directly做一次 - 或者多次将一个较小的字符串直接写入流中。

using (var file = File.CreateText(newpath))
{
    file.WriteLine(new string('0', size));
}