2009-11-13 78 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