0

我正在创建一个临时文件来存储一个无法放入内存的巨大矩阵。我想先将临时文件写入磁盘,以便可以使用流对象查找文件中的位置。我已经知道我需要的确切尺寸。

写 2 GB 的零最简单的方法是什么?

我试着一次写一个字节,这真的很慢。我还尝试编写字节数组块,这要快得多,但我必须在数学上很烂,因为我无法得到我期望的最终大小。

4

2 回答 2

3

BinaryWriter有一个Seek方法,它允许您在文件上设置任意位置,如果该位置在文件末尾之外也是如此。
如果您在此位置写入一个简单字节,操作系统将调整文件大小以允许在请求的位置写入。

    Dim testfile as String = "d:\temp\testfile.bin"
    Dim fs As FileStream = File.Create(testfile)
    Dim utf8 As UTF8Encoding = new UTF8Encoding()
    Dim bw As BinaryWriter = new BinaryWriter(fs, utf8)
    bw.Seek(1500, SeekOrigin.Begin) 'only 1500 bytes just for test
    bw.Write(255)
    fs.Close()
于 2012-10-09T22:28:22.853 回答
0

这不是非常有效,但我在 38 秒内编写了一个 2gig 文件,首先在调试模式下编译......

StringBuilder s = new StringBuilder();
for (int i = 0; i <= 4000; i++) s.Append("0");

System.Diagnostics.Stopwatch t = System.Diagnostics.Stopwatch.StartNew();
using (StreamWriter file = new StreamWriter(@"c:\temp\temp.text"))
{
      for (long i = 0; i < 2147483648; i+= 4000)
         file.Write(s.ToString());
}
this.label1.Text = t.Elapsed.TotalSeconds.ToString();

根据谷歌的说法, 2 场演出就是这么多。

所以,我不知道,你想要这个多快?

于 2012-10-09T22:25:05.930 回答