【发布时间】:2013-05-15 11:38:19
【问题描述】:
我正在尝试优化某些 WinForms 应用程序的冷启动时间。我已经对所有程序集进行了 NGen 处理,但仍然看到调用了 JIT。我启用了 MDA 的 jitCompilationStart 并看到来自 MDA 的运行时异常说某些东西导致了 JIT 的调用。
我的问题是 - 现在怎么办?我看到的是建议的调试器列表。如果我从列表中选择 sthm - 我在 VS 中什么也看不到。应用程序继续执行,仅此而已。如何获取有关应用程序的哪一部分调用 JIT 的信息?
我在 Debug->Exceptions -> Managed Debugging Assistants 中启用了 JitCompilationStart:
【问题讨论】:
-
您是在调试器下运行代码吗?来自msdn.microsoft.com/en-us/library/d21c150d.aspx:“启用 MDA 后,即使您的代码未在调试器下执行,它仍处于活动状态。如果在调试器不存在时引发 MDA 事件,则事件消息将显示在未处理的异常对话框中,尽管它不是未处理的异常。为避免出现该对话框,请在您的代码不在调试环境中执行时删除启用 MDA 的设置。"
-
@MarcSherman 如果没有附加调试器,则会出现异常对话框。如果我在启动时将 VS 附加到 WinForms 进程,则不会出现异常对话框,并且应用程序可以正常工作。但我没有看到任何来自 MDA 的日志或类似的东西。
-
从阅读有关 jitCompilationStart MDA 的信息中可以看出,它只报告 JIT 事件,所以也许你成功地摆脱了它们。如果你在 VS 上运行它并附加了一个根本不是 NGen 的程序版本,会发生什么?你看到 JIT 事件了吗?
标签: .net visual-studio-2010 debugging optimization