在构建过程中我们运行 aspnet_compiler.exe 对照我们的网站,以确保 ASP.NET/MVC 中的所有后期绑定内容都能真正构建(我对 ASP.NET 一无所知,但确信这是防止在运行时发现故障所必需的)。

我们的网站规模相当大,有几百个页面/视图/控件等。然而,所花费的时间在 10-15 分钟范围内似乎过多(作为参考,这比编译大约 40 个项目的整个解决方案所需的时间要长,而且我们只预编译两个网站项目)。

我怀疑硬件是问题所在,因为我正在最新的四核 Intel 芯片上运行,具有 4GB RAM 和 WD Velociraptor 10,000rpm 硬盘。奇怪的是,EXE 似乎并没有使用太多的 CPU(1-5%),而且似乎也没有执行大量的 I/O。

所以...这是一个已知的问题?为什么这么慢?有什么办法可以加快速度吗?

笔记: 为了澄清人们已经回答的一些问题,我不是在谈论 Visual Studio 中的代码编译。我们已经在使用 Web 应用程序项目,这些项目的编译速度不是问题。问题出在网站的预编译上 这些项目已经编译完毕(请参阅此 MSDN 页面了解更多详细信息)作为开发构建脚本的一部分。我们正在执行就地预编译,而不是将文件复制到目标目录。

有帮助吗?

解决方案

  1. 编译器应为每个.aspx页面生成第二个代码隐藏文件,检查
  2. 在编译期间,aspnet_compiler.exe会将所有网站文件复制到输出目录,包括css,js和images。
  3. 使用 Web应用程序项目而不是编译时,您将获得更好的编译时间网站模型。

其他提示

切换到Roslyn编译器最有可能显着改善预编译时间。这是一篇很好的文章: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -net-applications.aspx

除此之外,还要确保通过在编译元素上将批处理属性设置为true来启用批处理编译。

简单地说, aspnet_compiler 每当开始预编译任何单独的 aspx 页面时,都会使用有效的“全局编译器锁”;基本上只允许按顺序编译每个页面。

这样做是有原因的(尽管我个人不同意他们) - 主要是为了检测和防止循环引用导致无限循环,以及确保在编译所需页面之前正确构建所有依赖项,他们避免很多“讨厌的CS问题”。

我曾经开始编写一个大规模分叉版本 aspnet_compiler.exe 上次我在一家网络公司工作,但被“实际工作”束缚而从未完成。最大的问题是 ASPX 页面:MVC/Razor 的东西你可以并行化,但是 ASPX 解析/编译引擎的内部和私有类/方法的深度大约为 20 层。

我没有针对此编译器的任何特定热门提示,但是当我遇到这种问题时,我运行ProcMon来查看该进程在该机器上正在执行的操作,并运行Wireshark以检查它是否存在花费多年时间对一些长期被遗忘的机器进行一些网络访问,该机器在某些注册表项或环境变量中被引用。

只需2美分。

显着减慢ASP.NET视图预编译的一个原因是-fixednamesaspnet_compiler.exe命令行选项。 不要使用,特别是如果你使用的是Razor / MVC。

从Visual Studio发布wep应用程序时,请确保选择<!>“;不要合并<!>”;并且不要选择<!>“;创建单独的程序集<! > QUOT;因为这是导致全局锁定并减慢速度的原因。

此处有更多信息 https:// msdn .microsoft.com / EN-US /库/ hh475319(v = vs.110)的.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top