asp.net - 网站首次访问时启动时间异常长(总共长达 68 秒)

标签 asp.net iis

我有一个 ASP.Net 应用程序,首次访问时启动时间异常长。我做了一些跟踪,发现这个函数花费了 57 秒:

bool 值 System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection)

该函数依次调用以下函数 6 次:

Void System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder)

我的问题是 System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder 是做什么的?我的网络应用程序已经编译,我不知道为什么它在启动时进行任何类型的编译工作。这是正常的吗?难道有什么我不知道的事情发生吗?

最佳答案

启动 ASP.NET 应用程序时会发生大量引导过程。这包括启动工作进程、加载到 AppDomain 中的程序集以及当前目录中文件的编译。这个批处理编译过程是针对每个文件夹的,这意味着如果我第一次请求 / ,批处理编译器将扫描该文件夹以查找支持的类型,编译它们并缓存结果。这仅在根 / 文件夹中完成。我对另一个 /OffRoot 文件夹的第一个请求将导致另一次批量编译。

如果您有预编译站点,运行时仍会执行此类扫描,但确定它不必编译任何内容。

预编译网站和编译的 Web 应用程序之间存在重要区别。预编译的网站将提前完成第一次实例编译,因此只需将程序集加载到需要的位置的 AppDomain 中。对于已编译的 Web 应用程序,您已编译了基本源代码,但未编译 View (.aspx) 文件,因此它仍会执行首次编译(动态编译)。

关于asp.net - 网站首次访问时启动时间异常长(总共长达 68 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228632/

相关文章:

iis - 如何使启动任务幂等?

c# - OwinStartup 停止使用 IIS 启动(但仍在使用 IIS Express)

IIS 重写 - 创建 SEO 友好的 URL

IIS使用脚本切换路径

c# - 没有 Entity Framework 但存储过程的 ASP.Net Core 2.0 API OData

c# - Azure ML Web 服务请求在 C# 中不起作用

c# - 将 wav 转换为 mp3 - ASP.NET

asp.net - 使用 Asp.Net 主题时如何强制浏览器重新加载缓存的 CSS 文件?

asp.net - 如何在 MVC 3 中设置图表系列颜色?

iis - IIS 提供的本地主机证书不正确