c#二进制格式化程序速度慢
本文关键字:速度慢 程序 格式化 二进制 | 更新日期: 2023-09-27 18:22:27
我使用BinaryFormatter将对象序列化/反序列化为字节数组。但是太慢了。这是我的代码:
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, this);
stream.Close();
byte[] currentByteArray = stream.ToArray();
有没有可能改进代码,以加快速度。或者我的选择是什么?我见过其他一些序列化程序,比如xmlserialization,但我不想将其作为字节数组写入文件。
提前感谢!
如果像大家在评论中所说的那样将disposition放在finally
语句中,您的代码可以得到改进:
IFormatter formatter;
MemoryStream stream;
try
{
formatter = new BinaryFormatter();
stream = new MemoryStream();
formatter.Serialize(stream, this);
byte[] currentByteArray = stream.ToArray();
}
finally
{
if(stream!=null)
stream.Close();
}
然而,上面的代码并没有提高BinaryFormatter
类的性能,因为它可以正常工作并正确使用。但是你可以使用其他库。
NET中速度最快、通用的串行器之一是Protobuf-NET。例如:
[ProtoContract]
class SubMessageRepresentations
{
[ProtoMember(5, DataFormat = DataFormat.Default)]
public SubObject lengthPrefixedObject;
[ProtoMember(6, DataFormat = DataFormat.Group)]
public SubObject groupObject;
}
[ProtoContract(ImplicitFields=ImplicitFields.AllFields)]
class SubObject { public int x; }
using (var stream = new MemoryStream()) {
_pbModel.Serialize(
stream, new SubMessageRepresentations {
lengthPrefixedObject = new SubObject { x = 0x22 },
groupObject = new SubObject { x = 0x44 }
});
byte[] buf = stream.GetBuffer();
for (int i = 0; i < stream.Length; i++)
Console.Write("{0:X2} ", buf[i]);
}