ASP.NET MVC4 Razor视图预编译耗时超40分钟问题排查求助
提问内容
我尝试了Stack Overflow、MSDN上所有关于Razor编译慢的解决方案仍未解决问题,特来求助。
上下文
我有一个基于.NET Framework 4.6.2的ASP.NET MVC 4项目,在.csproj的Release配置中开启了Razor视图预编译:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <MvcBuildViews>true</MvcBuildViews> </PropertyGroup>
使用的IDE为Visual Studio 2019 版本16.11.75.64347。
合并某特性分支前项目运行正常,合并后Release模式编译时视图编译耗时达到40分钟以上。编译过程中输出窗口会缓慢弹出常规代码警告(未使用变量、不可达代码等),说明并非卡在单个任务,而是所有视图编译速度都极慢。
Debug模式运行时视图不会预编译,项目启动很快,但每个页面首次加载都需要3分钟以上,可见无论哪种调用方式,Razor视图编译速度都极慢。
问题
Razor视图(.cshtml)无论是预编译阶段还是运行时编译,耗时都过长。
已尝试的解决方案
- 删除解决方案目录下的.vs文件夹
- 清理解决方案并重启VS/电脑
- 更换IIS Express使用的端口
- 删除"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files"下所有文件
- 删除"C:\Users\USER\AppData\Local\Temp\Temporary ASP.NET Files"下所有文件
- 删除"C:\Users\USER\AppData\Local\Microsoft\WebSiteCache"下所有文件
- 删除项目目录下的bin和obj文件夹
- 以管理员身份运行VS
- 开关VS设置中的「仅我的代码」选项
- 清空"C:\Program Files (x86)\IIS Express"下的缓存和站点数据
补充信息
编译视图时,i7 CPU使用率仅20-30%,VS占比2-6%,CPU并非瓶颈,磁盘为SSD,内存16GB。
同事运行同一份代码编译速度正常,其他项目、甚至本次合并前的原分支也无此问题,部署同一代码的BuildAgent编译也正常,可知问题出在我本地环境配置。
解决方案(按优先级排查)
- 排查安全软件扫描规则
将项目根目录、所有Temporary ASP.NET Files相关目录、VS临时目录加入本地杀毒软件(Windows Defender、企业安全管控软件等)的扫描排除列表。CPU占用低的典型表现就是IO被过滤驱动卡住,安全软件的实时扫描会逐个检测编译过程中生成的临时文件、读取的cshtml文件,直接拖慢全量编译速度。 - 排查第三方VS扩展干扰
使用安全模式启动VS(运行命令devenv /safemode)后重新编译项目,如果速度恢复正常,逐一禁用近期安装的Razor语法检查、代码审计、静态扫描类扩展即可定位问题。 - 排查.NET运行时调试配置
检查系统环境变量,确认没有COMPLUS_JitDebugging、COMPLUS_ZapDisable等.NET调试相关的环境变量,这类变量会强制禁用JIT编译优化,大幅拖慢视图编译速度,找到后删除并重启电脑生效。 - 排查目录同步冲突
确认项目目录不在OneDrive、企业同步盘、云盘同步目录内,编译过程中大量临时文件生成会触发同步锁,直接导致IO阻塞。将项目迁移到本地普通目录重试。 - 重置ASP.NET运行时注册
打开管理员权限的命令提示符,进入C:\Windows\Microsoft.NET\Framework\v4.0.30319目录,执行命令aspnet_regiis -i重置ASP.NET运行时配置,修复运行时组件损坏导致的编译异常。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

