在C#中将二进制数据写入文件的最佳方法

mda*_*gny 4 c# performance file stream

我正在尝试优化一个以二进制格式序列化对象并将它们写入文件的类.我目前正在使用FileStream(由于我的对象的大小而处于同步模式)和BinaryWriter.这是我班级的样子:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在此代码上运行的探查器显示了良好的性能,但我想知道是否还有其他对象(或技术)可用于提高此类的性能.

Jon*_*eet 5

是的 - 您可以使用不同的序列化格式.内置的序列化格式很丰富,但也有缺点 - 与其他一些自定义格式相比,它非常冗长.

我最熟悉的格式是Protocol Buffers,它是Google提供的一种高效且可移植的二进制格式.但是,它确实要求您以不同的方式设计要序列化的类型.总有利有弊:)

还有其他二进制序列化格式,例如Thrift.

可能希望坚持内置序列化,但值得知道其他选项可用.

然而,在你走得太远之前,你应该确定你关心的是什么以及你实际需要多少担心性能.当你得到的东西可能很好的时候,你可能会浪费很多时间来调查选项:)