2009-11-13 32 views
2

我試圖序列化大約30   KB的數據,我需要找到更快的方式來序列化和反序列化數據。對我而言,速度與大小同等重要,所以要麼找到更緊密的數據壓縮方法,要麼需要更快的機制來構建對象。我試着爲它建立一些自定義的方法以及使用內置的序列化方法,但我希望有人在這裏有一些經驗。什麼是.NET最快的序列化方法?

在我的應用程序毫秒計數,所以速度很好比較大,特別是因爲一些對象可能是相當大的。

EDIT

的數據是與在其上大量的性質,包括一個詞典和多個整數和字符串字段的對象。假設一個複雜的網格。

所以我做了這個例子,它給了你一個關於對象中的關係可能是什麼樣子的想法。

<Serializable()> Class A 
    Inherits B 
    Dim _C As New C 
    Dim E As Byte() 
End Class 
<Serializable()> Class B 
    Dim A As Int32 
    Dim B As Dictionary(Of String, Object) 
End Class 
<Serializable()> Class C 
    Dim A As Int32 
    Dim D As String 
End Class 

當然也有訪問者的字段,但不應該影響這一點。

+0

請更具體;一個例子總是有用的 – 2009-11-13 02:30:31

回答

0

答案完全取決於要序列化的數據的種類和結構。

如果數據是30K字節的數組,則將整個數據塊作爲一個塊寫入二進制流,但速度不能太快。

如果數據是嵌入互連網格中的高度結構化對象的30K網格... - 祝您好運!

2

有幾件事想起來。

是否有可能減少被序列化的數據量?這對你來說可能是一個死衚衕,但它顯然會對性能產生很大的影響。

您是否可以通過串流化數據來減少整體延遲?如果序列化對象圖的目標是網絡流,文件等,那麼您可能能夠重疊一些兩個或多個操作並減少整體延遲。

你可以減少結構的通用性,使自定義序列化覆蓋更多的情況下?我正在看B :: B,它可以通過字典的值拉入任何類型。可能放入該詞典的實際類型完全在你的控制範圍內,但值得提出,因爲一般來說,更簡單和更受控制的數據結構更容易和更快速地進行序列化。

數據中是否有任何冗餘可以利用?如果您知道字典中包含的某些對象在功能上是等價的,那麼您可以將它們序列化爲一個組,並在序列化字典時通過索引引用它們。

另外,不要低估效果規模對性能的影響。同樣,這取決於程序在結構上做什麼,但是即使產生大字節流本身也可能產生時間成本。當然,通過網絡或文件發送更多字節也需要更多時間。

我建議爲類編寫最小的自定義序列化代碼將產生對運行時的默認序列化的淨改進,即使僅僅因爲您不需要寫出如此多的元數據。兒童成員的建設也應該更快。

另一種技術(這可能有幫助或可能不幫助)使您的數據結構更好地鏈接到序列化。例如,如果您有一個樹狀結構,除了父子引用之外,還要保留兄弟對兄弟引用,以便您可以按順序枚舉它們,而無需花費遞歸處理樹。還會想到一堆。您可以迭代堆中的項目,而不考慮項目之間的相互關係。

相關問題