我无计可施。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 都有这个问题。
- 删除所有断点什么都不做。
- Clean Solution或删除 .suo 也无济于事。
- 如果我修复 IIS Express,或删除
My Docs\IISExpress
文件夹,或修复/重新安装 Visual Studio → 问题可能会消失,但只会持续一段时间,然后才会再次出现。
任何建议都值得赞赏。
要回答更多问题,是的,我的机器肯定有马力。令人愤怒的是,同一个项目,没有任何改变,有时可以很快加载,通常是在我修复 IIS Express 并删除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 来回复制到网络共享。每次页面加载等待两分钟更烦人。