我正在创建一个临时文件来存储一个无法容纳在内存中的巨大矩阵。我想首先将临时文件写入磁盘,这样我就可以使用流对象寻找文件中的位置。我已经知道我需要的确切尺寸了。
最简单的写法是什么,比方说,2千兆的零?
我尝试一次写一个字节,这真的很慢。我也尝试过编写字节数组chuncks而且速度要快得多,但我必须对数学原因感到厌烦,因为我无法将最终大小变为我期望的结果。
答案 0 :(得分: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()
答案 1 :(得分: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演出为this much。
所以,我不知道,你想要多快这个?