提问者:小点点

Visual Studio调试/加载速度非常慢


我无计可施了。Visual Studio在调试或只是简单加载ASP.NET MVC站点(不调试就启动)时通常非常慢。并不总是这样:一开始,项目的加载速度很快,但是一旦加载速度慢了,那么之后的加载速度就会变慢。我可能要等1-2分钟或更长时间。

我的设置:

我目前使用的是Visual Studio 2012速成版,但在Visual Studio 2010速成版中也遇到了同样的问题。我的解决方案存储在网络驱动器上;具体地说,我的文档被重定向到一个网络驱动器,如果这很重要的话。(不应该。在这种设置下,我的站点有时加载得非常快。)

我通常会加载Internet Explorer9,但在Firefox中也会出现同样的问题。

在我工作的任何ASP.NET MVC项目中都可能发生这种情况,而且它似乎围绕着DisplayTemplates展开,我的所有ASP.NET MVC项目都是这样做的。全是C#和剃刀,如果有关系的话。

系统会加载我的符号数百次。基本上,如下所示,但至少有300个这样的行,每个行对于相同的CSHTMLs具有完全不同的DLL文件:

'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.

在上面,我有三个DisplayTemplates:“Contact”,“Location"和”StatusCode“。似乎每次调用displaytemplate时,IIS都会加载两次符号。因此,如果我显示一个包含100个条目的表,它调用了所有三个DisplayTemplate,那么它加载了600个独立的符号。

这也不是一个快速的行动。在IIS生成的日志文件中查看,每个符号加载大约需要200 ms。因此,超长的延迟。

我试过的:

    文件夹,或修复/重新安装Visual Studio,问题可能会消失,但只会在一段时间内消失,然后它会再次出现。/li>

如有任何建议,我们将不胜感激。

要回答更多的问题,是的,我的机器绝对有马力。令人气愤的是,同一个项目在没有任何更改的情况下,有时会非常快速地加载,通常是在我修复IIS Express并删除文件夹之后。最终,“一些事情”发生了,再加载只需2分钟。我正在做的并不是一个复杂的项目。没有外部库或依赖项,而且我的VS.NET没有任何附加项。

值得注意的是,这台机器具有Symantecendpoint保护,该保护具有造成浩劫的历史。但是完全禁用它(作为管理员很好)并不能解决这个问题。

在这一点上我有一个理论。我想这都是因为我正在处理一个网络共享的重定向文件夹。当调试器正在检查它的数百行“加载符号”时,我停下来看看它在做什么。它在我的代码中,加载了我的DisplayTemplate。单步执行模板将输出以下内容:

Step into: Stepping over non-user code 'System.Threading.WaitHandle.InternalWaitOne'
Step into: Stepping over non-user code 'System.Threading.WaitHandle.WaitOne'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCapture'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch'
Step into: Stepping over non-user code 'System.Web.Compilation.AssemblyBuilder.Compile'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.bciuyg14.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.CompileWebFile'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultInternal'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.Find'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.ActionCacheViewItem.Execute'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.kwj3uqan.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.RuntimeType.CreateInstanceSlow'
Step into: Stepping over non-user code 'System.Web.Mvc.DependencyResolver.DefaultDependencyResolver.GetService'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerCompiledView.Render'

每次调用displaytemplate时,Visual Studio似乎都在重新编译它,这也是数百次。我的理论是,Visual Studio编译文件,将其保存到网络共享,然后网络共享以某种方式在其上标记新的时间,然后Visual Studio认为该文件已更改,因此Visual Studio再次重新编译该文件。只是一种理论思想;我真的毫无头绪。

首先,显然我有脱机文件(这是办公室里的台式电脑,我不在乎)。明天我要停用,重启,重试。

另外,将我的项目按原样移动到本地C:可以修复它。它的装载速度很快。但这在工作环境中并不理想。我丢失了以前的版本,我的代码根本没有备份,除非我手动复制它,而且它不再与任何人共享。

我可以将它从C来回复制到网络共享,如果它来的话。每次页面加载都要等上两分钟,这要烦人得多。


共3个答案

匿名用户

下面是我如何解决Visual Studio2012中的“符号加载缓慢”问题的:

> ;选项-&>;调试-&>;一般

选中“Enable Just My Code”旁边的复选标记。

转到工具-&>;选项-&>;调试-&>;符号

点击“。。。”按钮并创建/在本地计算机上的某个位置选择一个新文件夹来存储缓存的符号。我把我的命名为“符号缓存”,并把它放在文档中--&>;Visual Studio 2012。

单击“加载所有符号”并等待从MicrosoftServer下载符号,这可能需要一段时间。请注意,“加载所有符号”按钮仅在调试时可用。

取消选中“Microsoft Symbol Servers”旁边的复选标记,以防止Visual Studio远程查询Microsoft服务器。

点击“OK”。

从现在开始,符号加载应该快得多。

请注意,如果对Microsoft程序集进行任何更改/下载,则可能需要返回“符号”对话框,再次“加载所有符号”。

匿名用户

关闭intelliTrace帮我解决了这个问题。

在Visual Studio中,工具-&>;选项-&>;智力竞赛

然后,取消选中“启用IntelliTrace”复选框。

匿名用户

这些对我来说都不起作用,但是我在一个符号上发现了一个断点,这个断点被删除了。看来2010年就在这上面了。要查看这是否是您的问题,请执行调试窗口断点,如果其中有断点,只需删除它们。

Saunders,提到他检查了这个问题,但是在这个问题的解决方案中没有提到。也许对某些人来说是常识,但不是所有人。