将字节[]写入二进制文件的最佳方法
我在服务器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
哪种方法是最好写的byte []成二进制文件?
直接到FileStream
。 BinaryWriter只是增加了一点开销。
软件包大小应该(可以)针对您的硬件进行优化,但通常默认值应该足够大。
如果我将某些软件包加入到byte []中,然后将其写入文件。哪个更好?多少字节[]大小写入文件更好? – GSP
我不知道确切的数字,但它始于8k和16k,所以你的64k块应该没问题。你已经试过这个(10M),并没有看到任何改进,所以不要打扰。 –
如果您只是使用Windows资源管理器复制文件需要多长时间?不管是什么,我都不会指望你可以提高很多。 –
你怎么写数据?请发布您的代码。 –
首先,我的输出文件在'Temp'文件夹下。我将它复制到另一个驱动器。大约需要3秒 – GSP