2017-03-03 30 views
0

私はサーバAに1GBを持っていますが、これをローカルに取得するにはRead()メソッドを使用する必要があります。それはパッケージ(16517パッケージ)に分割されます。各パッケージは65536バイトのヘッダーを含みます。バイナリファイルにbyte []を書き込む最良の方法

現在、私はBinaryWriterを使って各パッケージを直接ファイルに書き出します。しかし、それは5分(323642ミリ秒)以上かかった。

byte[]に10MBのパッケージをいくつか追加しようとしましたが、時間が短縮されません(317397 ms)。

byte[]をバイナリファイルに書き込むには、どのような方法が最適ですか?バイナリファイルに[]バイトを書き込むことが最善である方法

更新

const ulong Memory_10MB = 10485760; // 10MB 
do { 
    byte[] packetData = Read(&totalSize, /*Other parameters*/ ,&hasFollowing); 
    if (package == null) { 
     // Process error 
     return; 
    } 
    dataSize += (ulong)packetData.Length; 
    if (dataSize >= Memory_10MB) 
    { 
     if (binaryWriter == null) 
     { 
      path = Path.GetTempFileName(); 
      fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read); 
      binaryWriter = new BinaryWriter(fileStream); 
      if (responseData.Length > 5) 
      { 
       binaryWriter.Write(responseData.Skip(5).ToArray()); 
      } 
     }   
     binaryWriter.Write(packetData); 
    } 
    else 
    { 
     responseData = Utilities.ConcatArrays(responseData, packetData); 
    } 

} while (dataSize < totalSize); 
// Process after got data 
+0

Windowsエクスプローラを使用してファイルをコピーすると、どれくらいかかりますか?それが何であれ、私はあなたがそれを多く改善できるとは思わないでしょう。 –

+2

どのようにデータを書いていますか?あなたのコードを投稿してください。 –

+0

まず、私の出力ファイルは 'Temp'フォルダの下にあります。私はそれを別のドライブにコピーします。約3秒かかる – GSP

答えて

1

FileStreamに直接。 BinaryWriterはわずかなオーバーヘッドを追加するだけです。

パッケージのサイズは、ご使用のハードウェアに合わせて最適化する必要がありますが、一般的にはデフォルト値で十分です。

+0

いくつかのパッケージをbyte []に​​結合してファイルに書き込みます。どちらが良いですか?ファイルに書き込む方が、バイト[]のサイズがどれくらい良いですか? – GSP

+1

正確な数値はわかりませんが、8kと16kで始まります。したがって、64kブロックは問題ありません。あなたはすでにこれを試してみましたが(10M)、改善は見られませんでしたので、気にしないでください。 –

関連する問題