1

我正在尝试优化某些 WinForms 应用程序的冷启动时间。我已经对所有程序集进行了 NGen 处理,但仍然看到调用了 JIT。我启用了 MDA 的 jitCompilationStart 并看到来自 MDA 的运行时异常说某些东西导致了 JIT 的调用。

我的问题是——现在呢?我看到的是建议的调试器列表。如果我从列表中选择 sthm - 我在 VS 中什么也看不到。应用程序继续执行,仅此而已。如何获取有关应用程序的哪一部分调用 JIT 的信息?

在此处输入图像描述

我在 Debug->Exceptions -> Managed Debugging Assistants 中启用了 JitCompilationStart:

在此处输入图像描述

4

1 回答 1

2

该 MDA 是为了在抖动开始时附加一个调试器。要求是一个注册的非托管调试器,它能够调试 C++ 代码以及抖动的源代码。您已经满足了第一个要求,VS20120 和 VS2012 具有出色的非托管调试器。对于像你我这样的凡人来说,后者是相当困难的。整个场景只对 Microsoft SDET 感兴趣。

显然,您在诊断冷启动延迟方面走错了路。在不止一个方面,抖动是一个启动细节。冷启动主要取决于磁盘查找程序集文件所需的时间。使用 Ngen 实际上正是您不想做的事情,它使需要查找的文件数量增加了一倍。只有改善热启动时间才有好处。

冷启动延迟只有三个好的解决方案。使用更少的程序集,ILMerge 可以提供帮助。使用更快的磁盘,SSD 有很大帮助。并且作弊,在登录时启动一个小的无操作 .NET 程序,将程序集加载到文件系统缓存中。在用户启动您的 .NET 应用程序一段时间后,这实际上是自动的,Windows 预取器会学习并预加载 DLL。很难注意到,除了客户在一段时间后停下来抱怨。

于 2013-05-16T10:16:38.433 回答