我有一个ASP.Net应用程序,它第一次访问时需要非常长的时间来启动.我做了一些跟踪,发现这个函数花了57秒:
Boolean System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection)
而该功能依次调用以下一个6次:
Void System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder)
我的问题是System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder做什么的?我的Web应用程序已经编译好了,我不知道它为什么要在启动时进行任何类型的编译工作.这是正常的吗?有什么事我不知道吗?
启动ASP.NET应用程序时会发生相当多的自举.这包括启动工作进程,加载到程序集中的程序集AppDomain以及当前目录中的文件编译.这个批处理编译过程是每个文件夹,这意味着如果我/第一次请求,批处理编译器将扫描文件夹中的受支持类型,编译它们并缓存结果.这只在根/文件夹中完成.我对另一个/OffRoot文件夹的第一个请求将导致另一个批处理编译.
如果您有预编译的站点,运行时仍会执行此类扫描,但确定它不必编译任何内容.
预编译的网站和编译的Web应用程序之间存在重要差异.预编译的网站将提前完成这个第一个实例的编译,因此它只需要将程序集加载到AppDomain它需要的位置.使用已编译的Web应用程序,您已编译了基本源代码,但未编译views(.aspx)文件,因此它仍然执行首次编译(动态编译).
| 归档时间: |
|
| 查看次数: |
4967 次 |
| 最近记录: |