c# - 在 C# 中将二进制数据写入文件的最高效方法

标签 c# performance file stream

我正在尝试优化一个以二进制格式序列化对象并将它们写入文件的类。我目前正在使用 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/

相关文章:

c# - VSTO:不包含列标题

c# - 保存表单状态然后以相同状态打开它

c# - HTTP 错误 500.19 - 无法读取配置文件

google-chrome - 为什么我的 Google Chrome 扩展程序的弹出 UI 在外接显示器上滞后,而在笔记本电脑的 native 屏幕上却没有?

c# - 为我自己的类型在 byte[] 上实现 Linq 查询

java - 下一个更大元素的时间复杂度

python - 当包含的 Writer() 关闭它时,我仍然可以使用 StringIO 吗?

c# - 检查数据读取器中是否存在列

php - 标签 "Filesystem"上的问题

python - 下载 Excel 电子表格 Python