我在服务器A中有1GB,我必须使用Read()
方法将其发送到本地。它被分成包(16517包)。每个包都是65536字节,包括头。
目前,我使用BinaryWriter
直接将每个包写入文件。但它花了我超过5分钟(323642毫秒)。
我尝试将一些软件包加入到10MB的byte[]
中,但它不会减少时间(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 :(得分:1)
哪种方法最好将byte []写入二进制文件?
直接发送到FileStream
。 BinaryWriter只是增加了一点开销。
应该(可能)针对您的硬件优化软件包大小,但通常默认值应该足够。