C# 将二进制数据写入C文件的最有效方法#

C# 将二进制数据写入C文件的最有效方法#,c#,performance,file,stream,C#,Performance,File,Stream,我试图优化一个类,该类以二进制格式序列化对象并将其写入文件。我目前正在使用FileStream(由于对象的大小,处于同步模式)和BinaryWriter。下面是我的班级的样子: public class MyClass { private readonly BinaryWriter m_binaryWriter; private readonly Stream m_stream; public MyClass() { // Leave FileS

我试图优化一个类,该类以二进制格式序列化对象并将其写入文件。我目前正在使用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();
    }
}

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

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


我最熟悉的格式是,这是一种来自谷歌的高效、可移植的二进制格式。但是,它确实要求您以不同的方式设计要序列化的类型。总有利弊:)

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

您可能希望坚持使用内置序列化,但值得知道的是,还有其他选项可用


然而,在您走得太远之前,您应该确定您关心的是什么,以及您实际上需要为性能担心多少。您可能会浪费大量时间来研究选项,因为您得到的可能没有问题:)

“您可能希望坚持使用内置序列化”:只是为了完整性-我关于内置二进制序列化程序(
BinaryFormatter
)的经常争论是关于脆弱性,特别是版本控制和实现细节。然而,它确实具有最简单易用的便利性。“但是,它确实要求您以不同的方式设计要序列化的类型。”-这取决于您使用的实现-P