【问题标题】:Is it possible to pre-compile ASP.Net website on a stopped IIS 6 site?是否可以在停止的 IIS 6 站点上预编译 ASP.Net 网站?
【发布时间】:2010-07-08 12:27:07
【问题描述】:

我在 IIS 上有 2 个站点,一个是实时站点,另一个是仅在对实时站点进行维护时才启动的站点。

在部署场景中,我停止实时站点并启动维护站点,以便用户收到建议升级的友好消息。

我唯一遇到的问题是,当我启动实时站点时,它显然需要 JIT,这可能需要长达 3 分钟。

在我将它释放给用户之前,是否有这个 JIT?

编辑:澄清一下,这个网站是一个 CMS,所以下面标记的答案对我有用,因为只有 1 页要编译。

谢谢

【问题讨论】:

  • 发布前访问页面不能自己触发JIT吗?
  • 否,因为该站点尚未启动。

标签: c# .net asp.net compiler-construction iis-6


【解决方案1】:

看来您需要使用 NGen...

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

预编译网站进行部署,使用固定名称,将解决方案部署到服务器,然后在bin中生成所有程序集

MSDN article on NGen.

我应该补充一点,通过像这样预生成本机代码,您可能会失去运行时根据当前系统性能(例如内存和寄存器使用)执行的一些优化。这甚至可能导致网站运行速度比 JIT 慢。 Microsoft 建议您在目标平台上尝试 NGen 和 JIT 方法,条件与正常使用情况相近。

【讨论】:

    【解决方案2】:

    我能想到的唯一方法是更改​​已停止站点上的绑定、启动它、运行页面、应用绑定、关闭维护站点并启动活动站点。

    【讨论】:

    • 我将尝试一下,如果可行,我将标记为答案,谢谢。编辑:并不是我怀疑它是否有效;-)
    • 这不会 JIT 网站上的每个页面。每个页面将在第一次导航到时进行 JIT 处理。如果您运行网站上的每个页面,它会起作用。
    • 这是一个CMS,所以只有一页。
    • 好的。在这种情况下,您应该能够摆脱这种方法。但是,如果您将此标记为正确答案,请在您的问题中明确说明这是一个单页网站,并且该解决方案可能不适用于其他网站。
    【解决方案3】:

    我不相信有什么开箱即用的东西可以做到这一点。事实上,他们几个月前刚刚发布的IIS7 warmup module 基本上只是抓取并点击您的页面一次以“预热”它们。

    如果我是你,我会编写一个小程序,为每个页面生成 WebRequest。不过,可能有一个第三方工具可以快速轻松地做到这一点,所以这仍然是一个好问题......

    【讨论】:

      【解决方案4】:

      您可以使用 aspnet_compiler.exe 来预编译您的网站。您可以从命令行使用它,也可以从 nant 脚本调用它。

      [aspnet_compiler][1]

      [1]:http://msdn.microsoft.com/en-us/library/ms229863%28VS.80%29.aspx/>

      【讨论】:

      • 即使预编译,JIT 编译器也必须介入,创建原生代码,并将其缓存在服务器上
      • MSBuild 每次编译 ASP.NET 网站时都会使用 aspnet_compiler.exe 进行编译,所以这不会产生任何影响。
      • 感谢各位澄清我的想法,这个项目已经在这方面进行了预编译,我认为这不会有什么不同。
      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 2016-02-11
      • 2011-02-22
      • 2020-04-04
      • 1970-01-01
      • 2010-10-01
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多