2

我正在使用 aspnet_compiler.exe 来预编译我的应用程序以进行部署。

但是,我认为它不起作用,原因有两个:

  • 我在 C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 下看到我的应用程序程序集,即使我手动清除此目录并重新启动应用程序也是如此。
  • 存在对应用程序 JIT 的性能影响。这是我特别想避免的,即使它是“一次”。

这就是我正在做的事情:

  1. 在工作室中构建解决方案。
  2. 执行 aspnet_compiler.exe -v /Foo -pc:\builddir c:\deploydir(其中 Foo 是我的应用程序运行的 vdir,c:\builddir 是 studio 构建到的位置,c:\deploydir 是
  3. 然后我将 c:\deploydir 复制到 Web 服务器。
  4. 我访问http://localhost/Foo
  5. 30 秒后,应用程序显示出来,我可以看到程序集已在 Temporary ASP.NET Files 中生成。

如果值得注意的话,我使用的是 .net 3.5 SP1/Studio 2008 SP1。在 web.config 中也设置了编译 debug=false。

4

2 回答 2

2

你的两点没有实际意义:

  1. ASP.NET 预编译不会导致本地图像生成,因此 JIT 开销仍然存在。也可能存在工作进程创建开销。

  2. ASP.NET 预编译可以选择编译所有内容(包括 ASPX 内容,...)或仅编译源代码(您可以使用-u开关指定)。在后者的情况下,仍然会为 ASPX 文件生成这些程序集。在前者的情况下,您看到的不是程序集生成。运行时只是将程序集复制并缓存/binTemporary ASP.NET Files. 您可以通过逐字节比较程序集并查看它们是否相同来确认这一事实。

于 2009-07-15T00:10:15.927 回答
1

预编译网站aspnet_compiler.exe不会 JIT 编译代码 - 您需要生成代码才能做到这一点。

本机映像生成器 (Ngen.exe) 是一种提高托管应用程序性能的工具。Ngen.exe 创建本机映像,这些文件包含已编译的特定于处理器的机器代码,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时 (JIT) 编译器来编译原始程序集。

于 2009-07-15T00:08:32.747 回答