2012-06-13 46 views
0

我有一個相當大的應用程序,序列化不同類別的約100到XML。 由於需要一定的時間來在運行時創建的XML序列化,我在該應用加載這樣做的最重要的類。對於其他人,需要時。堅持實例XmlSerializer的

爲了提高我在想的性能在某種程度上堅持創建的串行器。

當我在谷歌上搜索這個問題,我發現與Microsoft工具「sgen.exe」的方式。它允許你創建一個組件,就我所知,它將所有的序列化器保存到指定程序集中的類型中。

當嘗試這樣做,我的組件我認識到,所有組件(和所有被它使用)需要簽署。在我開始創建大量簽名文件並開始爲所有項目執行此操作之前,我只想確保我不會丟失任何內容。

所以終於在這裏是我的問題: 是不是要走的路,如果我想有我XML序列化的應用程序運行之前可用?

我猜它們存儲在一個dll是「唯一出路」,但他們創建它的方式似乎很複雜的我。難道我不知道二進制序列化讓我們說我需要的所有類型的序列化程序(列表)的列表,並在啓動時加載它們,最後告訴框架使用它們嗎?

問候

+0

簽名時要小心,一旦你簽署了你的程序集*所有*你使用的其他程序集**必須**也被簽名。 – CodingGorilla

+1

你是否100%肯定實例化序列化程序是你的應用程序的瓶頸?我懷疑序列化過程本身將是一個更耗時的操作。 – walther

+0

不,這當然不是,但它是我想改進的許多要點之一 – derape

回答

0

創建串行確實是緩慢的。應該不會感到意外的是:畢竟創建一個序列化器意味着反映你的類型並在運行時生成(IL)代碼。使用sgen是要走的路:它在構建時執行相同的操作,將代碼存儲在磁盤上的程序集中,以便它不必在運行時生成。

您無法使用二進制序列化(可用於數據而不是代碼)對序列化程序的代碼進行序列化。實際上,代碼當然可以存儲在磁盤上,也可以存儲在程序集中,這正是sgen會爲你做的。

這是簽署包含序列化類型的組件是一個好主意,但是,這並不意味着所有組件需要簽名。只需將可序列化的類型放在一個單獨的dll中,並僅簽署一個。

+0

謝謝,所以我想沒有其他辦法了?將所有數據類重構爲另一個項目將會非常廣泛... – derape