2011-04-07 85 views
1

背景:序列化與BinaryFormatter的*性能*發出

我堅持與被序列化到文件的某些60MBs(並會隨時間增長)的大對象圖。問題不是文件大小,而是寫入和讀取時間,在某些機器上最多可達4分鐘。

簡介:

因爲這代表了某種內存數據庫,我可以延遲加載一些。

刺激:

如何測量特定對象塊的加載時間?我是否記錄構造函數調用並從那裏去?有什麼更好的想法

編輯:

我寧願不談替代序列化,有很多關於這個問題的帖子,我寧願調查爲什麼這麼慢,對象圖的哪個部分是好的候選'切除'並延遲加載。

+0

我只是很感興趣,你的對象圖表代表什麼?比相當平坦的清單/數據表更令人興奮嗎? – 2011-04-07 13:09:05

+0

你正在序列化,以便做到底是什麼?堅持磁盤? – BrandonZeider 2011-04-07 13:30:25

+0

它是內存數據庫。表格,對象等...... – 2011-04-07 17:10:23

回答

0

我會考慮使用SQL Server Compact(來自Microsoft的in-proc數據庫),而不是序列化大對象圖。

我有經驗使用BinaryFormatter序列化大圖到磁盤。有版本相關的問題。序列化的對象很難維護和使用。與這些對象一起工作通常需要將序列化到內存中。使用大圖是耗費資源的方式。

而Sql Server CE是相當輕量級的,它的組件大約是1Mb。它也處理一些多線程問題。

如果你需要序列化只是爲了通過網絡或其他方式發送,我想60Mb是相當大的陣列,傳輸它可能會有問題。

更新

如果你想一起去的BinaryFormatter,我想你可以序列化的圖形不是一個根對象,但較小的對象的集合。序列化所有對象可能會比較慢,但它可以讓你序列化只有一部分對象。如果你有不同類型的數組(即不同類型的對象序列),我可以假設更復雜的對象是,而且它的層次越深,序列化它的時間就越多。您可以測量同一類型對象集合的序列化時間。您也可以使用一些分析器對整個圖形進行序列化,大多數分析器會告訴您哪種方法需要更多時間才能執行。

+0

由於缺乏其他參數,將從服務器的數據表中提供:2 SQL Server的任何連接都需要SQL Server客戶端訪問許可證(CAL),包括從SQL Server Compact Edition連接。 3必須在線簽署簡單的再分配協議。 – 2011-04-07 17:13:34

+0

我的意思是,我不希望我的用戶更依賴M $,這足以讓他們擁有Windows :) – 2011-04-07 17:14:10

+0

那麼,他們已經擁有Windows和.NET,因此他們將擁有另一個並不重要小的簡單的嵌入式數據庫:)順便說一句,如果他們有'MSN Messenger',他們已經有'SqlServerCE'(誰使用MSN Messenger :))。 – 2011-04-07 17:39:12