2012-08-14 42 views
10

我有一個非常大而複雜的winforms應用程序。爲了減少啓動時間,我使用以下批處理文件預先生成了序列化程序集。爲什麼我的.NET啓動時間隨預生成序列化程序集增加而增加?

; delete any existing serialization assemblies 
del *XmlSerializers.dll 

; gen new serialization assemblies 
for %%a in (*.dll) do sgen /assembly:%%a 

; delete .deleted files (generated for assemblies which do not allow serialization) 
del *.dll.deleted* 

但令我驚訝的是,啓動時間實際上從4.6秒增加到了6.1秒 - 跳了1.5秒。無論是冷開始還是溫暖,這都是事實。

所以,問題:

  1. 爲什麼我的應用程序到位序列化組件啓動慢?
  2. 當應用程序生成序列化程序集時,是否有方法通過Perfmon或其他工具查看?
  3. 我正在生成序列化程序集嗎?
+0

下運行,除非有人知道如何打開批處理文件語法突出顯示,我們只需將其保留爲「lang-none」 。 – Adam 2012-08-14 23:59:34

+0

您生成了多少個序列化程序....如果數量很大....也許您可以將它們與ILMerge結合使用?你在64位Windows上運行嗎?您是否在項目中添加對預生成序列化DLL的引用? – 2012-08-15 01:56:41

+0

您可以使用/ Type選項僅爲將被序列化的類型生成序列化代碼...而不是生成DLL中的所有公共類型。 – 2012-08-15 02:02:51

回答

0

因爲.NET必須檢查簽名是否有效

+6

所以你說生成序列化程序集比檢查有效簽名更快? – AngryHacker 2012-08-14 23:48:18

+0

看,當你這麼說的時候,它聽起來很瘋狂。 – 2012-08-15 04:10:53

+0

@Cole是否有任何您可以引用的參考來支持它? – 2012-08-25 14:54:41

1

你應該配置您的應用程序,看看爲什麼啓動時間增加。 Perfview將是一個很好的工具。

如果在JITtting中花費了太多時間,請考慮NGEN您的應用程序。如果加載的頁面太多,請考慮使用mpgo優化,如果您在.Net 4.5

相關問題