2017-03-03 91 views
0

我在服務器A中有1GB,我必須使用Read()方法才能將其置於本地。它被分成包(16517包)。每個包是65536字節包含頭。將字節[]寫入二進制文件的最佳方法

當前,我用BinaryWriter直接將每個包寫入文件。但花了我5分多鐘(323642毫秒)。

我嘗試加入一些包到byte[]的10MB,但它不會減少時間(317397毫秒)。

哪種方法最好將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

哪種方法是最好寫的byte []成二進制文件?

直接到FileStream。 BinaryWriter只是增加了一點開銷。

軟件包大小應該(可以)針對您的硬件進行優化,但通常默認值應該足夠大。

+0

如果我將某些軟件包加入到byte []中,然後將其寫入文件。哪個更好?多少字節[]大小寫入文件更好? – GSP

+1

我不知道確切的數字,但它始於8k和16k,所以你的64k塊應該沒問題。你已經試過這個(10M),並沒有看到任何改進,所以不要打擾。 –

相關問題