我正在尝试优化一个以二进制格式序列化对象并将它们写入文件的类。我目前正在使用 FileStream(由于我的对象的大小而处于同步模式)和 BinaryWriter。这是我的类(class)的样子:
public class MyClass
{
private readonly BinaryWriter m_binaryWriter;
private readonly Stream m_stream;
public MyClass()
{
// Leave FileStream in synchronous mode for performance issue (faster in sync mode)
FileStream fileStream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite, maxSize, false);
m_stream = fileStream;
m_binaryWriter = new BinaryWriter(m_stream);
}
public void SerializeObject(IMySerializableObject serializableObject)
{
serializableObject.Serialize(m_binaryWriter);
m_stream.Flush();
}
}
在此代码上运行的探查器显示出良好的性能,但我想知道是否有其他对象(或技术)可用于提高此类的性能。
最佳答案
是的——您可以使用不同的序列化格式。内置的序列化格式很丰富,但也有缺点 - 与其他一些自定义格式相比,它非常冗长。
我最熟悉的格式是Protocol Buffers ,这是一种来自 Google 的高效且可移植的二进制格式。但是,它确实需要您设计要以不同方式序列化的类型。总是有利有弊:)
还有其他二进制序列化格式,例如 Thrift .
您可能想坚持使用内置序列化,但值得知道还有其他选项可用。
然而,在你走得太远之前,你应该确定你关心什么,以及你实际上需要为性能担心多少。当您所拥有的可能还不错时,您可能会浪费大量时间研究选项 :)
关于c# - 在 C# 中将二进制数据写入文件的最高效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732138/