当你创建一个ASP.NET页面时,其实是在创建一个.NET类的源代码,创建System.Web.UI.Page类的一个实例(Instance)
ASP.NET页面的所有内容,包括所有脚本(script)和HTML内容,都会编译进一个.NET类中。
请求一个ASP.NET页面时,ASP.NET Framework检测这个页面对应的.NET类是否存在,如果不存在,Framework会自动把这个页面编译成一个新的类,并把编译后的类(程序集)保存到到ASP.NET临时文件夹中。
下次对这个页面的请求时,页面就不会再编译一次了。先前的编译类会执行并把结果返回给浏览器。
一个类加入到ASP.NET临时文件夹时,这个类与原始ASP.NET应用程序之间就建立起了文件以来,任何方式对ASP.NET页面的修改,对应的.NET类都会被自动地删除,下次对这个页面请求时,框架自动地把修改后的页面代码编译成一个新的.NET类。
这个过程叫做动态编译(Dynamic Compilation)。 动态编译使ASP.NET应用程序得以支持成千上万并发用户。不同于传统的ASP.NET页面,页面不需要在每次被请求时都进行分析和编译,页面仅在应用程序被修改时才进行编译。
注解:
通过设置CompilationMode属性,可以禁用单个页面、一个文件夹中的页面或整个网站的动态编译。
- <%@ Page %>应用CompilationMode属性:禁用单个页面的动态编译
- Web配置文件的Pages元素应用CompilationMode属性:禁用整个文件夹或整个应用程序的动态编译。
当网站有数千个页面,又不愿为每个页面向内存中加载程序集时,禁用编译就很有用。把CompilationMode属性设置为Never,页面就不会被编译,也不会为这个页面生成程序集。页面仅在运行时被解释。
对包含服务器端代码的页面,不能禁用编译。具体来说,未编译页面不能包含服务器端<script>代码块。此外,未编译页面不能包含ASP.NET控件和数据绑定表达式(datebinding expression).