首页 > 代码库 > asp.net的运行内幕

asp.net的运行内幕

    每当浏览器向IIS发送一个页面请求的时候,相应的网页就会被编译成DLL文件,然后由JIT来运行这个DLL文件,最后将运行结果发送给客户端。一旦网页发送了变化,下次再请求页面的话,网页又会被重新被编译成DLL文件,再由JIT来运行。为了防止发生文件重名,生成的DLL文件采用了随机命名。

    当向IIS发送请求时,其内部执行过程如下:

  1. 检查在服务器内存中是否存在这个网页的对应的本地机器代码
  2. 如果存在,则执行本地机器代码,将运行结果发送到客户端
  3. 如果不存在本地机器代码,则检查是否存在这个网页编译后的中间代码,如果存在,则将中间代码编译成本地机器代码,再执行本地机器代码将结果返回给客户端,并将本地机器代码缓存到内存中
  4. 如果不存在对应的中间代码,则将这个网页编译成中间代码,然后将中间代码编译成本地机器代码,将本地机器代码的执行结果发送给客户端,再将本地机器代码缓存到内存中。

    以下是运行时的流程图:

    由上述可知,在服务器没有清理掉内存中的机器代码时,访问同一个页面,服务器会直接执行缓存中的机器代码,运行速度是相当快的。所以aspx页面在第一次被打开式会比较慢,因为要先生成DLL文件再编译成机器代码;以后再次执行时就会比较快。除非修改了代码,否则没有必要重新生成DLL,并且对于第一次运行比较慢的情况,可以通过预编译来解决。

    ps:上述过程可以在安装IIS后,把aspx文件放在Inetpub\wwwroot目录中,并通过在浏览器输入http://localhost/+"对应aspx文件名",返回结果后,可以在C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files的临时文件里发现生成root的文件夹,在这个文件夹里会生成一个随机命名的dll文件,如下图所示:

 

asp.net的运行内幕