我无计可施。 Visual Studio 通常调试起来非常缓慢,或者只是简单地加载(“不调试就开始”)我的 ASP.NET MVC 站点。并非总是如此:起初,项目会加载得又快又好,但一旦加载缓慢,之后它们总是会加载缓慢。我可能要等 1-2 分钟或更长时间。
我的设置:
我目前正在使用 Visual Studio 2012 Express,但我在 Visual Studio 2010 Express 中也遇到了同样的问题。我的解决方案存储在网络驱动器上;具体来说,如果重要的话,它会将我的文档重定向到网络驱动器。 (不应该。有时我的网站在此设置下加载速度非常快。)
我通常在 Internet Explorer 9 中加载,但在 Firefox 中也会出现同样的问题。
这可能发生在我从事的任何 ASP.NET MVC 项目中,并且它似乎围绕着 DisplayTemplates,这是我所有的 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.
在上面,我有三个 DisplayTemplate:“Contact”、“Location”和“StatusCode”。每次调用显示模板时,IIS 似乎都会加载符号两次。因此,如果我要显示一个包含 100 个条目的表格,这些条目调用所有这三个显示模板,则加载了 600 个单独的符号。
这也不是一个快速的操作。 IIS 生成的日志文件大约需要 200 毫秒才能加载每个符号。因此,超长延迟。
我试过的:
Debug 或 Release 版本,没关系。
将我的项目放在 Web 服务器上的完整 IIS 实现上,运行速度非常快,没有任何问题。
Cassini、IIS Express 7.5 和 IIS Express 8.0 都有这个问题。
删除所有断点什么都不做。
清洁解决方案,或删除 .suo 也无济于事。
如果我修复 IIS Express/删除 My Docs\IISExpress 文件夹,或修复/重新安装 Visual Studio → 问题可能会消失,但只会持续一段时间,然后才会再次出现。
任何建议都值得赞赏。
要回答更多问题,是的,我的机器肯定有马力。令人气愤的是,同一个项目,没有任何改变,有时可以很快加载,通常是在我修复 IIS 之后 表达并删除 My Docs\IISExpress
文件夹。最终,“某事”发生了,再次加载只需 2 分钟。我正在做的不是一个复杂的项目。没有外部库或依赖项,我的 VS.NET 也没有任何附加组件。
值得注意的是,这台机器有 Symantec Endpoint Protection,它有造成严重破坏的历史。但是完全禁用它(成为管理员很好)并没有解决问题。
在这一点上,我有一个理论。我认为这完全是因为我正在处理网络共享的重定向文件夹。当调试器检查它的数百个“加载符号”行时,我停下来看看它在做什么。它在我的代码中,加载了我拥有的 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 2012 中解决“符号加载缓慢”问题的方法:
转到工具 -> 选项 -> 调试 -> 常规
选中“仅启用我的代码”旁边的复选标记。
转到工具 -> 选项 -> 调试 -> 符号
单击“...”按钮并在本地计算机上的某处创建/选择一个新文件夹以存储缓存的符号。我将我的命名为“符号缓存”并将其放入 Documents -> Visual Studio 2012。
单击“加载所有符号”并等待从 Microsoft 的服务器下载符号,这可能需要一段时间。请注意,加载所有符号按钮仅在调试时可用。
取消选中“Microsoft 符号服务器”旁边的复选标记,以防止 Visual Studio 远程查询 Microsoft 服务器。
单击“确定”。
从现在开始,符号加载应该更快。
请注意,如果您对 Microsoft 程序集进行任何更改/下载,您可能需要返回“符号”对话框并再次“加载所有符号”。
关闭 IntelliTrace 为我解决了这个问题。
在 Visual Studio 中,工具 -> 选项 -> IntelliTrace
然后,取消选中“启用 IntelliTrace”复选框。
https://i.stack.imgur.com/dKLxZ.png
这些都不适合我,但我在已删除的符号上找到了断点。似乎 2010 年就这样挂了。要查看这是否是您的问题,请执行 debug->windows->breakpoints 如果其中有任何问题,请删除它们。
桑德斯,提到他检查过,但在这个问题的解决方案中没有提到。也许对某些人来说是常识,但不是我们所有人。
我删除了“临时 ASP.NET 文件”文件夹,我的 localhost 页面加载得到了显着改善。这是路径... %temp%\Temporary ASP.NET Files\
你启用了FusionLog吗?
开始调试时,我的 VisualStudio 启动、打开解决方案和加载符号非常慢。仅在我的机器上很慢,但在其他机器上却没有。
FusionLog 将大量日志内容写入磁盘。就我而言,只需在 RegEdit 上禁用它就可以解决所有问题。
这是注册表中的 FusionLog 键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
检查 ForceLog 值(1 启用,0 禁用)。
FusionLog
,但忘了禁用它。现在调试 ASP.NET MVC
应用程序要快得多。感谢上帝和@rkawano。 :)
我遇到了同样的问题,并尝试了上述大多数解决方案。简单地删除缓存和临时文件最终对我有用。
尝试删除这两个文件夹的内容:
C:\Users\\{UserName}\AppData\Local\Microsoft\WebsiteCache
和
C:\Users\\{UserName}\AppData\Local\Temp
(尤其是 iisexpress 和 Temporary ASP.NET Files 文件夹)。
这可以设置为在登录到 Windows 时自动发生,方法是向 C:\Users\\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
文件夹添加一个 cmd 文件,其中包含以下内容:
rmdir C:\Users\\{username}\AppData\Local\Microsoft\WebsiteCache /s /q
rmdir C:\Users\\{username}\AppData\Local\Temp /s /q
我想我可能最终至少知道了原因,尽管不是原因。当问题再次出现时,我注意到大量“conhost.exe”进程成为孤儿。我会关闭 Visual Studio,它们会保持打开状态。结束每个人的任务最终可靠地解决了问题。 [希望]
(请注意,conhost.exe 不是 Visual Studio 进程,尽管 Visual Studio 使用它。因此,那里的其他用户可能有其他运行 conhost.exe 的应用程序。我知道我的机器没有,这就是为什么我可以安全地结束除 YMMV 之外的所有任务。)
至于为什么会这样?当我一次打开多个项目时似乎会发生这种情况,我倾向于经常这样做,即使我在任何时候只构建和调试其中一个。
编辑#1 - 不幸的是,这不是“银弹”。它并不总是对我有用。通常,当事情变得缓慢时,我会关闭所有 Visual Studio 会话,然后进入任务管理器并结束它的任何实例,conhost.exe、iisexpress.exe Microsoft.VisualStudio.Web.Host.exe 和 MSBuild.exe我可以找到。
通常,在那之后,当我重新启动我的项目时,它会快速加载。但不总是。
真的,我认为最好的做法可能是不要从重定向的文件夹/网络共享中构建和调试代码。
编辑 #2 - 两年后,这对我来说在 Visual Studio Community 2013 中仍然是一个问题,但我似乎至少找到了罪魁祸首任务:Explorer.exe。是啊,谁知道。我结束该任务的那一刻,bam,页面在一秒钟内加载。
如果我有一个 Windows 资源管理器文件浏览器打开到我重定向的网络驱动器(这通常是因为这是我的代码所在的位置),则似乎会发生此问题。关闭窗口是不够的,我必须杀死整个 Explorer.exe 任务。我只能猜测它在做什么......文件句柄发疯了?
我通常可以使用任务管理器来启动一个新的 explorer.exe 任务(我只能使用这么多的 alt-tabbing),并且 Visual Studio 将继续快速加载。但是,如果我再次打开 Windows 资源管理器,它几乎总是会回到超慢动作。
所以,如果你有一个重定向的网络共享,试一试。它肯定比在本地工作要好。
对我来说,它是 IE 9.08.8112.16241。当我使用 Firefox 或 Chrome 时,使用 F10 或 F11 进行调试时不会出现缓慢的调试。我不知道 IE 的问题是什么,但我现在正式鄙视使用它进行测试。
更新:我已关闭所有 IE 程序附加组件,它已恢复全速。一次打开它们显示 LastPass(在我的情况下)是罪魁祸首。我想我毕竟不能责怪 MS。
几年后...如果您使用 Brave,您可以轻松访问您的扩展,并在调试时一次(或多个)关闭它们。
brave://extensions
只需单击切换滑块。请注意,除了 DuckDuckGo 隐私必需品之外,我的所有内容都已开启。它们没有被删除,只是暂时禁用。
https://i.stack.imgur.com/1sbdP.png
对我来说,我实现了 this tip,它通过将以下两个属性添加到 web.config
中的编译标记来显着提高性能
<compilation ... batch="false" optimizeCompilations="true"> ... </compilation>
batch="false"
有什么作用?
它通过仅编译已更改并需要重新编译的页面来使预编译更具选择性
optimizeCompilations
到底在做什么? Source
ASP.NET 使用每个应用程序的哈希码,其中包括许多事物的状态,包括 bin 和 App_Code 文件夹以及 global.asax。每当 ASP.NET 应用程序域启动时,它都会检查此哈希码是否与之前计算的有所不同。如果有,那么整个 codegen 文件夹(已编译和影子复制的程序集所在的位置)将被清除。当启用此优化时(通过 optimizeCompilations="true"),哈希不再考虑 bin、App_Code 和 global.asax。因此,如果这些更改我们不会清除 codegen 文件夹。
参考:Compilation element on MSDN
我在调试时也遇到了执行性能问题,我尝试了很多调试器选项。在我的情况下,当我更改此选项时实现了巨大的性能:
工具 - 选项 - 调试 - 输出窗口 - (常规输出设置 - 所有调试输出) - 关闭
就我而言,它是带有 VS 2012 的 .NET Reflector Visual Studio Extension(版本 8.3.0.93)。每次 Step Over (F10) 的调试需要 10 秒。
在 Visual Studio 中,转到 Tools/Extensions and Updates... 并禁用 .NET Reflector Visual Studio Extension。不要忘记重新启动 Visual Studio。
就我而言,它是
Tools/Options/Debugging/General/Enable JavaScript debugging for ASP.NET (Chrome and IE)
一旦我取消选中它,我的调试开始时间从 45-60 秒下降到 0-5 秒。
有一次,停电后,每次遇到断点或抛出异常时,我都不得不面对同样的缓慢问题。
我模糊地记得“suo”文件(与“sln”解决方案文件位于同一目录中)可能已损坏并使一切变慢。
https://i.stack.imgur.com/qC8bM.png
我删除了我的“suo”文件,一切正常。 .suo 文件删除是无害的,仅意味着重新创建我的 Windows 布局以及启动项目和一些其他非关键自定义。
.vs
文件夹。删除那个。
我也遇到了这个问题,以下是我执行的步骤,它总是对我有用:
删除解决方案的 .suo 文件。
删除临时 ASP.NET 文件(您可以在 %WINDOW%\Microsoft.NET\Framework\\Temporary ASP.NET Files 中找到它)
删除应用程序中的所有断点。
我不知道您是否仍然遇到此问题,但我在 Visual Studio 中通过将调试器附加到进程本身来调试站点,而不是让 VS 为我做这件事,我发现它可以大大缩短时间。我为 VS 使用了一个名为 AttachTo 的扩展,并且我有一篇关于如何使用它的小文章 here。
我希望这有帮助。
通过禁用浏览器链接解决了我的慢速 VS 问题
https://i.stack.imgur.com/mSMkg.png
如果有人注意到此行为来自左侧字段,请检查以确保您没有在 web.config 中设置任何断点。我一定是通过鼠标单击设置了一个,它确实减慢了所有调试操作。
在花了一整天等待符号以与海龟速度一样慢的速度加载之后,在所有可能的组合之间混合和切换:Just My Code, Caching symbols、Intellitrace、Just-In-Time、killing processes 等。
我的解决方案实际上是禁用防病毒软件。是的,Windows Defender 正在减慢我的项目启动速度!它会在 Visual Studio 请求时检查所有 dll,并减慢整个符号加载过程。
我不得不说我们的机器具有很好的规格,可以非常快速地编译解决方案,所以这从来都不是问题。我们在 VS 2013 Ultimate 中编写代码。
清空符号缓存对我有用。
见:菜单栏/工具/选项/调试/符号/空符号缓存
在 Visual Studio 中:
工具 -> 选项 -> 调试 -> 符号
选择“仅指定的模块”。单击“指定模块”链接,并添加一个空白模块(单击新文档按钮并单击确定)。
清除缓存等。使用选项 1 和 2;对于设置/故障排除选项 3 和 4,尽情享受吧!
选项 1:导航到 IIS express,清除缓存和站点
cd "C:\Program Files (x86)\IIS Express\"
运行此 appcmd.exe 列表站点 /xml | appcmd 删除站点 /in
运行此 Del /S /F /Q %temp% - 以清除 Userprofile Temp 文件夹。
运行这个 Del /S /F /Q %Windir%\Temp
此外,清除 %temp%
中的临时文件并注销,或重新启动
这将清除 Windows 临时文件夹。这将删除所有网站,享受!
选项 2:删除/重新创建临时文件夹
Cmd> rmdir C:\Users\\{用户名}\AppData\Local\Microsoft\WebsiteCache /s /q
Cmd> rmdir C:\Users\\{用户名}\AppData\Local\Temp /s /q
选项 3:JMC(仅我的代码)选项 from MSDN
要在 Visual Studio 中启用或禁用 Just My Code,under Tools > Options (or Debug > Options) > Debugging > General, select or deselect Enable Just My Code
。
https://i.stack.imgur.com/myJIv.png
选项 4:配置 Visual Studio/禁用常见插件问题
更多Visual Studio settings您还可以配置 Visual Studio 并禁用环境中的资源终止功能,不记得我从哪里得到的,但我很快就会发布更多的三个。
环境 -> 一般
取消选中“根据客户端性能自动调整视觉体验”
取消选中“启用丰富的客户端视觉体验”选中“使用硬件图形加速(如果可用)”环境 -> 自动恢复
取消选中“每次保存自动恢复信息”
环境 -> 文件
选中“无法将数据保存在代码页中时将文档另存为 Unicode”环境 -> 键盘
将“ForceGC”设置为 ctrl+num1
将“ReSharper_Toggle”设置为 ctrl+num0(如果使用了 ReSharper)
将“ReSharper_EnableDaemon”设置为 ctrl+num8(如果使用了 ReSharper)环境 -> 启动
将“启动时”设置为“启动时显示空环境”
取消选中“每次下载内容”环境 -> 同步设置
取消选中“登录到 Visual Studio 时跨设备同步设置”
由于未知的 VS 扩展替换了默认的即时调试器,Asp.net 核心调试非常缓慢。
我在 OPTIONS\DEBUGGING\Just-In-Time 配置选项卡中找到了这样的消息(作为警告文本)。另一个调试器已将自己注册为即时调试器。要进行修复,请启用即时调试或运行 Visual Studio 修复。
说明:https://msdn.microsoft.com/en-us/library/ssc8234s.aspx?f=255&MSPPError=-2147217396
返回默认的 JIT 调试器(刚刚选中的未选中的 Managed 选项)解决了我所有的问题。
就我而言,我注意到禁用我的互联网连接会使其运行速度与使用 ctrl-f5 一样快,所以我去调试->选项->符号并取消选中所有 .pdb 位置。
似乎 VS 每次启动调试会话时都试图连接到这些服务器。
请注意,禁用 Debug->Options->Debugging->General “启用源支持”或“要求源文件与原始版本完全匹配”不会有任何区别。
类似的问题浪费了我一半的时间!
由于我的问题的解决方案与此处所说的不同,因此我将其发布,以便对其他人有所帮助。
我的是一个断点。我有一个“Break at function”断点(即,我们不是在代码行上按 F9,而是使用断点窗口创建它们),它应该在我的项目外部的库函数中停止。
我有 “使用 Intellisense 验证函数名称”检查。 (信息 here。)
这比地狱慢(项目启动从 2 秒到 5 分钟)。
删除断点解决了它。
完成上述所有操作后对我有用的一件事是:在线程窗口(调试->Windows->线程)中,将 Group by 设置为 None。这只能在调试时完成。
即使在关闭该窗口之后,这也会产生影响。
在 Windows 资源管理器中打开解决方案文件夹,关闭 Visual Studio,从 Windows 资源管理器中删除 .suo 文件。
现在在 Visual Studio 中打开项目,希望调试器能够快速附加/分离。
对我来说,这是条件断点。这些似乎真的让事情变慢了。
转到您的环境变量并查找键 _NT_SYMBOL_PATH。
删除它。
瞧,工作就像一个魅力。
value == symsrv*symsrv.dll*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols
仍然没有骰子!
不定期副业成功案例分享