Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 Catel示例在VisualStudio中加载非常慢_Visual Studio 2012_Mvvm_Catel - Fatal编程技术网

Visual studio 2012 Catel示例在VisualStudio中加载非常慢

Visual studio 2012 Catel示例在VisualStudio中加载非常慢,visual-studio-2012,mvvm,catel,Visual Studio 2012,Mvvm,Catel,有人知道为什么Catel框架示例从visualstuio启动时运行得这么慢吗?运行任何演示应用程序时,加载时间都非常慢(约45秒)。但是,在VS之外直接运行.exe的速度与预期的一样快(选项和设置”中: 调试->符号: 选择选项“所有模块,除非排除” 将以下内容添加到排除列表: Catel.Core.dll Catel.Extensions.Controls.dll Catel.MVVM.dll (以及您碰巧参考的任何Catel模块) 最奇怪的是:在我这样做了一次之后,我可以从排除列表中删除

有人知道为什么Catel框架示例从visualstuio启动时运行得这么慢吗?运行任何演示应用程序时,加载时间都非常慢(约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'
。。。然后输出窗口首先显示立即加载了
Catel.Core.dll
,但是
UIAutomationProvider.dll
需要很长时间才能显示

我的GAC有什么问题吗?

一些提示:

  • 检查调试记录器是否花费了太多的时间(输出窗口正试图跟上进度,减慢速度)
  • 检查是否已启用符号,则可能是visual studio试图加载源符号(请参阅)

  • 我也遇到了这个问题(事实上我在很多电脑上都试过!)

    我的解决办法如下:

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

    • 调试->符号:
    • 选择选项“所有模块,除非排除”
    • 将以下内容添加到排除列表:

    • Catel.Core.dll

    • Catel.Extensions.Controls.dll
    • Catel.MVVM.dll
    (以及您碰巧参考的任何Catel模块)

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

    (虽然在下次重新启动后可能会更改…(idk)

    但无论如何,我把它们放在排除列表中,因为我根本不需要加载那些模块——毕竟它们应该是“无错误的”,至少不需要我调试

    问候

    约翰内斯科尔姆塞

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


    另一个很好的副作用是,您不会被那些“Manifest Resource stream not found Exception”或“ThreadAbortException”(当PleaseeWaitService完成时)所困扰(所有用于调试设置的都是“在抛出异常时中断”)

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