Catel 示例在 visual studio 中加载非常缓慢
Catel examples load very slowly in visual studio
有人知道为什么从 Visual Stuio 启动 Catel Framework 示例 运行 这么慢吗? 运行使用任何演示应用程序时,加载时间都非常慢(大约 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
..ok,进一步缩小范围:任何对Catel.Core的引用将导致巨大的延迟。当我取消注释 Catel 参考线时,在输出 window:
中会看到以下额外的行
'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>();
... 然后输出 window 首先显示 Catel.Core.dll
立即加载,但随后 UIAutomationProvider.dll
需要很长时间才能出现。
我的 GAC 有问题吗?
一些提示:
- Performance considerations
- 检查调试记录器是否花费了太多时间(输出 window 试图跟上,减慢了速度)
- 检查您是否启用了符号,然后可能 visual studio 正在尝试加载源符号(参见 docs)
我也为这个问题苦苦挣扎(事实上我在很多电脑上都试过了!)。
我的解决方案如下:
VS "Debug-> Options and Settings":
- 调试 -> 符号:
- 选择选项 "All modules, unless excluded"。
将以下内容添加到排除列表中:
Catel.Core.dll
- Catel.Extensions.Controls.dll
- Catel.MVVM.dll
(以及您碰巧引用的 Catel 模块)。
最奇怪的是:在我做了一次之后,我可以从排除列表中删除那些 dll,并且仍然可以快速开始调试:-/
(虽然这可能会在下次重启后改变....idk)
但我还是将它们保留在排除列表中,因为我根本不需要加载这些模块 - 毕竟它们应该是 "bugfree",至少我不需要调试... .
此致
约翰内斯·科尔姆塞
更新:事实证明,您只需在排除的模块列表
中指定 "Catel.*.dll" 即可轻松禁用所有 Catel dll 的加载
这样做的另一个好处是,您不会被那些 "Manifest Resouce stream not found exceptions" 或 "ThreadAbortException"(当 PleaseWaitService 完成时)打扰(全部用于调试设置 "Break on Thrown Exceptions")
有人知道为什么从 Visual Stuio 启动 Catel Framework 示例 运行 这么慢吗? 运行使用任何演示应用程序时,加载时间都非常慢(大约 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
..ok,进一步缩小范围:任何对Catel.Core的引用将导致巨大的延迟。当我取消注释 Catel 参考线时,在输出 window:
中会看到以下额外的行'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>();
... 然后输出 window 首先显示 Catel.Core.dll
立即加载,但随后 UIAutomationProvider.dll
需要很长时间才能出现。
我的 GAC 有问题吗?
一些提示:
- Performance considerations
- 检查调试记录器是否花费了太多时间(输出 window 试图跟上,减慢了速度)
- 检查您是否启用了符号,然后可能 visual studio 正在尝试加载源符号(参见 docs)
我也为这个问题苦苦挣扎(事实上我在很多电脑上都试过了!)。
我的解决方案如下:
VS "Debug-> Options and Settings":
- 调试 -> 符号:
- 选择选项 "All modules, unless excluded"。
将以下内容添加到排除列表中:
Catel.Core.dll
- Catel.Extensions.Controls.dll
- Catel.MVVM.dll
(以及您碰巧引用的 Catel 模块)。
最奇怪的是:在我做了一次之后,我可以从排除列表中删除那些 dll,并且仍然可以快速开始调试:-/
(虽然这可能会在下次重启后改变....idk)
但我还是将它们保留在排除列表中,因为我根本不需要加载这些模块 - 毕竟它们应该是 "bugfree",至少我不需要调试... .
此致
约翰内斯·科尔姆塞
更新:事实证明,您只需在排除的模块列表
中指定 "Catel.*.dll" 即可轻松禁用所有 Catel dll 的加载这样做的另一个好处是,您不会被那些 "Manifest Resouce stream not found exceptions" 或 "ThreadAbortException"(当 PleaseWaitService 完成时)打扰(全部用于调试设置 "Break on Thrown Exceptions")