【问题标题】:ASP.Net JIT CompilerASP.Net JIT 编译器
【发布时间】:2011-03-11 02:56:13
【问题描述】:

我在托管多个 asp.net 应用程序的 Web 服务器上遇到响应时间缓慢的问题。我没有预编译我的应用程序,所以我知道对应用程序的第一个请求需要一些时间来加载(5 到 10 秒)。但是,如果应用程序空闲了一段时间(20-30 分钟),即使我在 IIS 7.5 中将应用程序池的“空闲超时”设置为 0,响应仍然很慢。因此,我正在考虑编写一个 Windows 服务,该服务将每 10 分钟向各个应用程序发送请求以保持它们的活动状态。我的问题是 JIT 编译器如何处理应用程序中的子目录。当您请求单个页面时,JIT 编译器会编译应用程序的所有代码,还是仅能处理当前请求?

因此,当我编写 Windows 服务时,我可以只向应用程序中的单个页面发送请求,还是还需要向每个子目录中的页面发送请求?

谢谢。

【问题讨论】:

  • 这是一个 ASP.NET 应用程序还是 ASP.NET 网站项目?另外,为什么您没有预编译您的应用程序?
  • 这些是 ASP.NET 网站。我没有预编译站点,因为我喜欢在必要时直接在服务器上进行更改。

标签: asp.net .net-3.5 iis-7.5


【解决方案1】:

ASP.NET 模型通常使用为 App_Code 目录的内容以及 global.asax 文件创建单独的程序集,然后将每个目录中的所有 .aspx 页面编译成一个单独的程序集(根据请求)。

用户控件和母版页通常也独立于 .aspx 页面进行编译。我假设您在部署时使用“可更新”选项。那样的话

  1. app_code 文件夹编译在 部署时间
  2. .aspx 和母版页的代码隐藏文件在部署时编译
  3. 对于每个目录 - 文件背后的所有代码都在部署时编译成单独的程序集
  4. 如果您有一个 global.asax,那么它会在第一次请求时编译
  5. 所有 ascx 和 .master 文件都会在请求时(按文件夹)编译成单独的程序集。

因此,鉴于上述情况,您必须向每个文件夹中的至少一个页面发出请求,以保持网站“热”。

如果您使用了“固定名称”选项,那么您将拥有更多程序集,但当您希望能够更新 .aspx 文件时,此选项也是最佳选择。但请务必在生产服务器上测试您的站点并编译性能。

【讨论】:

    【解决方案2】:

    看看这个:

    新的“自动启动”功能 ASP.NET 4 和 IIS 7.5 提供了一个 定义明确的方法,允许您 执行昂贵的应用程序 启动和预缓存逻辑,可以 在任何最终用户点击您之前运行 应用。这使您能够拥有 您的应用程序“热身”并准备就绪 从一开始,并交付一个 始终如一的高性能 经验。

    Auto-Start ASP.NET Applications (VS 2010 and .NET 4.0 Series)

    【讨论】:

    • 感谢 rick,但应用程序不在 4.0 中。它们在 3.0 和 3.5 中。
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2011-07-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多