我真是一筹莫及。Visual Studio通常调试很慢,或者只是简单地加载(“开始时不调试”)我的ASP。NET MVC站点。不总是这样:一开始,项目加载得又快又好,但一旦它们加载得慢了,之后就会一直加载得慢。我可能要等1-2分钟甚至更久。

我的设置:

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

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

这可能发生在任何ASP中。NET MVC项目,我的工作,它似乎围绕有显示模板,这所有我的ASP。NET MVC项目可以。如果重要的话,它全部是c#和Razor。

症状:

系统会加载我的符号数百次。基本上,如下所示,但是至少有300行这样的行,对于相同的cshtml,每一行都有略微不同的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.

在上面,我有三个显示模板:"Contact", "Location"和"StatusCode"。每次调用显示模板时,IIS似乎都要加载两次符号。因此,如果我显示一个包含100个条目的表,调用所有这三个显示模板,它将加载600个单独的符号。

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

我的尝试:

无论是调试版本还是发布版本,都不重要。 将我的项目放在web服务器上的完整IIS实现上运行非常快,没有任何问题。 卡西尼、IIS Express 7.5和IIS Express 8.0都存在这个问题。 删除所有断点不起任何作用。 Clean Solution,或者删除.suo也不做任何事情。 如果我修复IISExpress /删除My Docs\IISExpress文件夹,或修复/重新安装Visual Studio→这个问题可能会消失,但只是在它回来之前的一段时间。

任何建议都是感激的。

回答更多的问题,是的,我的机器绝对有马力。令人恼火的是,同样的项目,没有任何改变,有时可以很快加载,通常是在我修复IISExpress并删除My Docs\IISExpress文件夹之后。最终,“一些事情”发生了,再次加载的时间缩短到2分钟。我正在做的项目并不复杂。没有外部库或依赖项,我的VS.NET没有任何附加组件。

值得注意的是,这台机器有赛门铁克端点保护,它有造成严重破坏的历史。但是完全禁用它(成为管理员是件好事)并不能解决问题。

在这一点上我有一个理论。我想这一切都是因为我正在处理一个重定向文件夹从一个网络共享。当调试器运行它的数百个“加载符号”行时,我停下来看看它在做什么。它在我的代码中,加载我拥有的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'

看起来Visual Studio在每次调用时都在重新编译我的显示模板,同样是数百次。我的理论是Visual Studio编译文件,将其保存到网络共享,然后以某种方式在其上标记一个新的时间,然后Visual Studio认为文件已经更改。因此,Visual Studio再次重新编译它。不过这只是个理论;我真的不知道。

首先,很明显,我有离线文件(这是办公室里的台式电脑;我一点也不在乎)。我要禁用,重启,明天再试。

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

如果需要的话,我可以在C和网络共享之间来回复制它。每个页面加载都要等上两分钟,这要烦人得多。


当前回答

我在VS 2013中遇到了这个问题。几个月来,我的测试调试正常,但突然出现了可怕的加载符号消息,我没有意识到我做了什么导致它的事情。

这里或任何其他网页上的建议都帮不了我。每样东西我都试了至少10次。删除.suo文件并没有帮助,但在同一位置有两个扩展名为.testsettings的文件和一个扩展名为.vsmdi的文件。这些文件似乎过时了,可能是VS 2010的遗物。创建它们的团队成员早就不在了。

我发现我可以毫无问题地删除这三个文件。我发现只要删除一个特定的.testsettings文件来停止加载符号消息就足够了。我的噩梦结束了。

其他回答

我想我至少知道原因了,虽然还不知道原因。当问题再次出现时,我注意到大量的“conhost.exe”进程被孤立。我会关闭Visual Studio,他们会继续开着。在它们各自上结束任务,最终可靠地解决了问题。(希望)

(请注意,conhost.exe不是Visual Studio进程,尽管Visual Studio使用它。因此,其他用户可能有其他运行conhost.exe的应用程序。我知道我的机器没有,这就是为什么我可以安全地结束任务,除了YMMV。)

为什么会这样呢?当我一次打开多个项目时,这种情况似乎就会发生,尽管我每次只构建和调试其中一个项目,但我往往经常这样做。


编辑#1 -不幸的是,这不是一个“银弹”。这对我来说并不总是有效。通常,当事情变慢的时候,我只是关闭我的VisualStudio会话,然后进入任务管理器并结束它的任何实例,conhost.exe, iisexpress.exe我能找到的Microsoft.VisualStudio.Web.Host.exe和MSBuild.exe。

通常,在那之后,当我重新启动我的项目时,它会很快加载。但并非总是如此。

真的,我认为最好的做法可能是不要在重定向文件夹/网络共享上构建和调试代码。


编辑#2 -两年后,在Visual Studio Community 2013中,这仍然是我的一个问题,但我似乎至少找到了罪魁祸首任务:Explorer.exe。是啊,谁知道呢。当我结束那个任务时,砰,页面在一秒钟内加载。

如果我有一个Windows资源管理器文件浏览器打开我的重定向网络驱动器(这是经常因为我的代码在那里),这个问题似乎发生了。关闭窗口是不够的,我必须杀死整个Explorer.exe任务。我只能猜测它在做什么……被文件句柄搞疯了?

我通常可以使用任务管理器来启动一个新的explorer.exe任务(我只能使用这么多alt-tab), Visual Studio将继续快速加载。但如果我再次打开Windows资源管理器,它几乎总是回到超慢动作。

所以,如果你有一个重定向的网络共享,给它一个机会。这肯定比在当地工作要好。

我也面临着这个问题,下面是我执行的步骤,它总是对我有效:

删除解决方案的.suo文件。 删除临时ASP。网络文件 (你可以在%WINDOW%\Microsoft找到它。净\ Framework \ \临时ASP。网络文件) 删除应用程序中的所有断点。

有一次,在断电后,每次遇到断点或抛出异常时,我都不得不面对同样的速度缓慢问题。

我模糊地记得“suo”文件(与“sln”解决方案文件在同一个目录中)可能被损坏,并使一切变慢。

我删除了我的“suo”文件,一切正常。删除.suo文件是无害的,只意味着重新创建我的windows布局加上启动项目和其他一些非关键的自定义。

下面是我在Visual Studio 2012中解决“符号加载缓慢”问题的方法:

Go to Tools -> Options -> Debugging -> General CHECK the checkmark next to "Enable Just My Code". Go to Tools -> Options -> Debugging -> Symbols Click on the "..." button and create/select a new folder somewhere on your local computer to store cached symbols. I named mine "Symbol caching" and put it in Documents -> Visual Studio 2012. Click on "Load all symbols" and wait for the symbols to be downloaded from Microsoft's servers, which may take a while. Note that Load all symbols button is only available while debugging. UNCHECK the checkmark next to "Microsoft Symbol Servers" to prevent Visual Studio from remotely querying the Microsoft servers. Click "OK".

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

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

对我来说,就是在托管兼容模式下调试。在底部的“工具->选项->调试->通用”中,取消勾选“使用托管兼容性模式”。调试变成了即时的,而过去调试一行要花上一分钟。我怀疑这就是上面OP片段中“Managed”的意思。

更多信息请访问:https://blogs.msdn.microsoft.com/visualstudioalm/2013/10/16/switching-to-managed-compatibility-mode-in-visual-studio-2013/