2009-11-13 76 views
4

我想优化一个以二进制格式序列化对象并将它们写入文件的类。我目前正在使用FileStream(在同步模式下,因为我的对象的大小)和一个BinaryWriter。这里是我的课是什么样子:将二进制数据写入C文件中的最高性能的方法#

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(); 
    } 
} 

这个代码中的探查运行表现出良好的性能,但如果有其他对象(或技术),我可以用它来改善这一类的性能我想知道。

回答

5

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

我最熟悉的格式是Protocol Buffers,这是Google提供的一种高效的便携式二进制格式。但是,它确实需要您以不同的方式设计要序列化的类型。总是有优点和缺点:)

也有其他的二进制序列化格式,如Thrift

可能想要坚持内置序列化,但值得知道的是,其他选项可用。

然而,在你走得太远之前,你应该确定你在乎的是什么以及你究竟需要多少担心性能。你可能会花费大量的时间来调查选项,因为它可能会很好:)

+1

“你*可能*想要坚持内置的序列化”:只是为了完整性 - 我常说的关于内置的二进制序列化程序('BinaryFormatter')关于*脆性*,特别是版本和实现细节。然而,它确实有最简单的工作方便。 – 2009-11-13 22:05:40

+1

“但是,它确实需要您以不同的方式设计要序列化的类型。” - 这取决于您使用的实施方式... ;-p – 2009-11-13 22:09:54