Catel示例在visual studio中加载速度非常慢

时间:2015-03-31 18:48:55

标签: visual-studio-2012 mvvm catel

有人知道为什么Catel Framework示例在从Visual Stuio启动时运行得如此之慢?运行任何演示应用程序时,加载时间非常慢(大约45秒)。但是,在VS之外直接运行.exe的速度与预期的一样快(<2秒)。 系统:Windows 7 Pro x64,Visual Studio 2012 Pro

修改

我通过将App.xaml.cs代码减少到此来缩小问题:

protected override void OnStartup(StartupEventArgs e)
{
    var serviceLocator = IoC.ServiceLocator.Default;
}

..并在方法的左括号处设置断点,在F5之后需要40秒才能达到该断点。如果我注释掉servicelocator行然后运行,断点几乎立即被击中。

修改2

..好吧,进一步缩小范围:任何对Catel.Core的引用都会导致巨大的延迟。当我取消注释Catel参考线时,在输出窗口中可以看到以下额外的行:

'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'c:\users\bruce.tw\documents\visual studio 2012\Projects\CatelLoggingTinker\CatelLoggingTinker\bin\Debug\Catel.Core.dll', Symbols loaded.
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll'
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Security\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread '<No Name>' (0x3d24) has exited with code 0 (0x0).
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.SqlXml\v4.0_4.0.0.0__b77a5c561934e089\System.Data.SqlXml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationProvider.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'CatelLoggingTinker.vshost.exe' (Managed (v4.0.30319)): Loaded 'Anonymously Hosted DynamicMethods Assembly'

如果我OnStartup中的唯一一行是

Catel.Collections.ListDictionary<int, int> cc = new Catel.Collections.ListDictionary<int, int>();

...然后输出窗口首先显示Catel.Core.dll已立即加载,但UIAutomationProvider.dll需要很长时间才能显示。

我的GAC有问题吗?

2 个答案:

答案 0 :(得分:1)

一些提示:

  1. Performance considerations
  2. 检查调试记录器是否花费了太多时间(输出窗口试图跟上,减慢速度)
  3. 检查您是否启用了符号,然后可能是Visual Studio尝试加载源符号(请参阅docs

答案 1 :(得分:1)

我也在努力解决这个问题(实际上在许多计算机上我试过了!)。

我的解决方案如下:

在VS&#34; Debug-&gt;选项和设置&#34;:

  • 调试 - &gt;符号:
  • 选择选项&#34;所有模块,除非排除&#34;。
  • 将以下内容添加到排除列表中:

  • Catel.Core.dll

  • Catel.Extensions.Controls.dll
  • Catel.MVVM.dll

(无论你碰巧参考哪个Catel模块)。

最奇怪的是:在我执行此操作后,我可以从排除列表中删除这些dll,并且仍然可以快速启动调试: - /

(虽然下次重启后可能会改变.... idk)

但是我仍然将它们排在排除列表中,因为我根本不需要加载这些模块 - 它们应该是&#34; msf;&#34;毕竟,至少不应该需要我调试....

此致

Johannes Colmsee

更新:事实证明,只需指定&#34; Catel。*。dll&#34;就可以轻松禁用所有Catel dll的加载。在排除模块列表中

另一个不错的副作用是,你不会被那些&#34; Manifest Resouce stream未被发现的异常所困扰&#34;或者#34; ThreadAbortException&#34; (当PleaseWaitService完成时)(全部用于调试设置&#34;中断抛出异常&#34;)

相关问题