2012-08-14 36 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

相关问题