Catel 示例在 Visual Studio 中加载非常缓慢

Posted

技术标签:

【中文标题】Catel 示例在 Visual Studio 中加载非常缓慢【英文标题】:Catel examples load very slowly in visual studio 【发布时间】:2015-03-31 18:48:54 【问题描述】:

有人知道为什么 Catel Framework 示例从 Visual Stuio 启动时运行如此缓慢吗?运行任何演示应用程序时,加载时间都非常慢(大约 45 秒)。但是,在 VS 之外直接运行 .exe 与预期的一样快(

编辑

我通过将 App.xaml.cs 代码缩减为以下代码来缩小问题范围:

protected override void OnStartup(StartupEventArgs e)

    var serviceLocator = IoC.ServiceLocator.Default;

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

编辑 2

..ok,进一步缩小范围:任何对 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 有问题吗?

【问题讨论】:

【参考方案1】:

我也遇到过这个问题(事实上,我在很多计算机上都试过了!)。

我的解决方案如下:

在VS“调试->选项和设置”中:

调试 -> 符号: 选择“所有模块,除非排除”选项。

将以下内容添加到排除列表:

Catel.Core.dll

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

(以及您碰巧引用的任何 Catel 模块)。

最奇怪的是:在我这样做一次之后,我可以从排除列表中删除那些 dll,并且仍然可以快速开始调试:-/

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

但我还是将它们保留在排除列表中,因为我根本不需要加载这些模块 - 毕竟它们应该是“无错误”的,至少不需要我调试......

问候

约翰内斯·科尔姆塞

更新:事实证明,您只需在排除的模块列表中指定“Catel.*.dll”即可轻松禁用所有 Catel dll 的加载

另一个很好的副作用是,您不会被那些“Manifest Resouce stream not found exceptions”或“ThreadAbortException”(当 PleaseWaitService 完成时)打扰(全部用于调试设置“Break on Thrown Exceptions”)

【讨论】:

【参考方案2】:

一些提示:

    Performance considerations 检查调试记录器是否花费了太多时间(输出窗口试图跟上,从而减慢速度) 检查是否启用了符号,那么可能是 Visual Studio 试图加载源符号(请参阅 docs)

【讨论】:

谢谢,我查看了这些要点,但无济于事。请看我的编辑 尝试删除所有断点。还要确保通过 Options => Debugging => Symboles,你有一个符号缓存目录。 有趣...我让它工作(快速加载),但为了做到这一点,我必须启用“.NET Framework 源单步执行”(选项 -> 调试 -> 常规)。 知道为什么Catel 对调试有这种特殊要求吗? 可能是 VS2012 和 Catel 提供的源服务器 pdb 文件(以支持源步进)。

以上是关于Catel 示例在 Visual Studio 中加载非常缓慢的主要内容,如果未能解决你的问题,请参考以下文章

将 catel 与 3rd 方控件一起使用

csharp 在Visual Studio(适用于大型项目)的整个解决方案中,使用公共库中的NLog工作的示例类。

我的程序可以在 Visual Studio 中运行,但不能在其他 IDE 示例 AWS Cloud 9 中运行

使用 Visual Studio 2008 构建 boost python 示例

Visual Studio 中 Opencv 的介绍性示例程序以代码 -1 退出。没理由

使用 Visual Studio 测试 intel galileo 示例