我有一个 ASP.Net 应用程序,第一次访问时启动时间异常长。我做了一些跟踪,发现这个函数花费了 57 秒:
Boolean 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 应用程序,您已经编译了基本源代码,但是视图 (.aspx
) 文件不会被编译,所以它仍然会执行第一次编译(动态编译)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)