我有一个 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/