我真是一筹莫及。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和网络共享之间来回复制它。每个页面加载都要等上两分钟,这要烦人得多。


当前回答

在Visual Studio中:

工具—>选项—>调试—>符号

选择“仅指定模块”。单击“指定模块”链接,并添加一个空白模块(单击新文档按钮并点击OK)。

其他回答

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

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

我也有调试的执行性能问题,我尝试了调试器的很多选项。在我的情况下,巨大的性能实现时,我改变了这个选项:

工具-选项-调试-输出窗口-(通用输出设置-所有调试输出)-关闭

我想我至少知道原因了,虽然还不知道原因。当问题再次出现时,我注意到大量的“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资源管理器,它几乎总是回到超慢动作。

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

是否开启了FusionLog?

我的VisualStudio启动很慢,在开始调试时打开解决方案和加载符号。它只在我的机器上很慢,但在其他机器上没有。

FusionLog会将大量的日志写入磁盘。只要在注册表上禁用它就解决了我的问题。

这是注册表上的FusionLog键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

检查ForceLog值(1 enabled, 0 disabled)。

我不小心选择了“Show Threads in Source”选项。在取消选择时,步进代码是正常的。