我机智。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:“联系人”,“位置”和“ StatusCode”。似乎每次调用displaytemplate时,IIS都会两次加载符号。因此,如果我要显示一个包含100个条目的表,这些表调用所有这三个displaytemplates,则将加载600个单独的符号。
这也不是一个快速的操作。查看IIS生成的日志文件,每个符号加载大约需要200毫秒。因此,超长的延迟。
我尝试过的
- 调试或发行版本,没关系。
- 将我的项目放在Web服务器上的完整IIS实施中,可以毫无问题地快速运行它。
- Cassini,IIS Express 7.5和IIS Express 8.0都有问题。
- 删除所有断点不执行任何操作。
- 干净的解决方案,或删除.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 每次都在重新编译我的displaytemplate ,这又是数百次。我的理论是Visual Studio编译文件,将其保存到网络共享中,然后网络共享以某种方式在其上添加新的时间,然后Visual Studio认为文件已更改,因此Visual Studio再次重新编译它。虽然只是一个理论;我真的不知道
例如,显然我有离线文件(这是办公室中的台式计算机;我不在乎)。我要禁用,明天重新启动并重试。
另外,将我的项目按原样移动到本地C:即可修复它。它加载非常快。但这在工作环境中并不理想。我丢失了以前的版本,除非手动复制,否则根本不会备份我的代码,并且不再与任何人共享。
我可以将它从C来回复制到网络共享(如果涉及)。每个页面加载等待两分钟会更加令人讨厌。