2017-03-03 143 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),并没有看到任何改进,所以不要打扰。 –