29

在我们的构建过程中,我们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 页面)之后对站点进行预编译。我们正在执行就地预编译,而不是将文件复制到目标目录。

4

5 回答 5

8

切换到 Roslyn 编译器很可能会显着缩短预编译时间。这是一篇关于它的好文章:https ://devblogs.microsoft.com/aspnet/enabling-the-net-compiler-platform-roslyn-in-asp-net-applications/ 。

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

于 2015-08-26T12:13:41.643 回答
6

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

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

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

于 2013-01-16T01:09:04.490 回答
2
  1. 编译器应该为每个 .aspx 页面生成第二个代码隐藏文件,检查
  2. 在编译过程中,aspnet_compiler.exe 会将所有网站文件复制到输出目录,包括 css、js 和图像。

使用Web 应用程序项目而不是网站模型,您将获得更好的编译时间。

于 2008-11-17T01:49:52.470 回答
0

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

于 2008-11-14T11:44:58.683 回答
-1

只是我的2美分。

显着降低 ASP.NET 视图预编译速度的原因之一-fixednamesaspnet_compiler.exe. 不要使用它,尤其是在使用 Razor/MVC 时。

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

在此处输入图像描述

更多信息在这里https://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx

于 2018-06-08T14:03:18.010 回答