0

メモリに収まらない巨大なマトリックスを格納するための一時ファイルを作成しています。ストリームオブジェクトを使用してファイル内の位置を探すことができるように、最初に一時ファイルをディスクに書き込みたいと思います。必要な正確なサイズはすでにわかっています。

たとえば、2ギガバイトのゼロを書く最も簡単な方法は何ですか?

一度に1バイトずつ書いてみましたが、とても遅いです。また、バイト配列のチャンクを書いてみましたが、それははるかに高速ですが、最終的なサイズを期待どおりに取得できないため、数学を理解する必要があります。

4

2 に答える 2

3

BinaryWriterにはSeekメソッドがあり、この位置がファイルの末尾の外にある場合でも、ファイルの任意の位置を設定できます。 この位置に単純なバイトを書き込むと、OS はファイルのサイズを変更して、要求された位置に書き込みできるようにします。

    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

これは非常に効率的ではありませんが、2gig ファイルを 38 秒で作成し、最初にデバッグ モードでコンパイルしました...

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 に答える