ASP中处理#include

来源:互联网 发布:网页制作三剑客软件 编辑:程序博客网 时间:2024/06/12 17:39

ASP中处理#include

在ASP中处理#include 文件与用编译高级编程语言,如C/C++处理包含文件,这两种方法之间有两个主要区别。 
第一,ASP不从最终形成的ASP文件中移走那些未涉及到的信息。这是因为ASP独立于脚本引擎,不过多地进行代码 
分析。大体说来,如果遇到了ASP文件的基本语法请求,信息就被缓存(假定缓冲器是打开的)并被发送到适当 
的脚本引擎,进行进一步的分解、标记及执行。


除了这个“死码”问题,ASP包含文件与编译语言之间的另一个区别在于:每个ASP文件都可以被看作它自己 
的程序。只要一个页面不包含另一个,在ASP的意义上看来它们就没有关系,尽管二者对整个站点的运行都很 
关键。因此,被两个不同页面所共享的一个#include 文件必须要被两个文件都完全包含。从本质上说,ASP不具 
备许多高级语言所具备的连接器的优势,连接器可以用来避免包含文件中代码和数据的冗余。


如果把我所概括的ASP包含文件的问题组合起来,结论就是:它对一个大型站点的内存将是破坏性的。想象 
一下这种情况:一个包含文件中包含了可能要用到的所有共享程序。按照这种设计,导致的结果是所有的ASP页 
都必须包含这一关键的文件。如果EverythingButTheKitchenSink.inc 经过分解之后与ASP文件的平均长度相同, 
那么被ASP分配并为缓存的ASP文件使用的内存中的一半都充满了本来多余没用的信息。

813


调用NT Task Manager/Processes 可以看到正被站点所使用着的内存,并观察一下多少内存是由mtx.exe 
(如果站点被设置成独立的程序在IIS4上运行),dllhost.exe (如果站点被设置成独立的程序在IIS5上运行), 
或是inetinfo.exe (如果不是独立的,见下面的图)这些程序所使用。想要掌握内存增加得有多快,一个很好的 
测试方法是启动IIS后调用一个简单的页面来看看内存的大小。(看内存之前要调用一个ASP文件,因为在处理第 
一个ASP文件时要建立一些普通的通用文件)。现在在你的站点上使用其它ASP文件,并监控每一个被使用的ASP文 
件对内存的作用。

比如说我创建了ASP文件。第一个文件RunFirst.asp,是一个小文件,在观察内存之前初始化ASP资源。另外 
两个文件除了它们所要使用的#include 文件信息不同以外,是完全一样的。将这些文件复制到你的wwwroot目录下, 
然后按顺序运行RunFirst.asp, HelloWorld1.asp和 HelloWorld2.asp,执行HelloWorld1.asp和HelloWorld2.asp 
之后观察内存,你会发现后者使用了更多的内存。这是因为它使用的#include 文件中有一个很大的未使用的程序, 
BigAndUnreferenced, 它对页面的运行结果没有任何作用,但却占据了400K的内存。在Windows 2000 Server 
w/ IIS5 上依次进行下列步骤得到的结果是:

运行RunFirst.asp 后内存6,104K 
运行HelloWorld1.asp后内存 6,124K 
运行HelloWorld2.asp后内存 6,544K

仅仅按照这个顺序没有什么明显的意义,颠倒装载顺序之后的结果是:

运行 RunFirst.asp 后内存6,096K 
运行 HelloWorld2.asp后内存 6,536K 
运行 HelloWorld1.asp 后内存6,540K

请注意开始和结束的内存数不完全一致,因为内存管理器根据最近的请求大块地分配内存。但是相对而言, 
最终的轮廓总是HelloWorld2.asp 占据大块的内存份额。本文结尾处可以下载这些简短的代码。浏览以下这些 
代码,但要分清内存的不同:

RunFirst.asp 是这样的:

< %@ LANGUAGE="VBSCRIPT" % > 
< HTML > 
< HEAD >< TITLE >Seed Page to load general ASP resources< /TITLE >< HEAD > 
< BODY > 
< % 
Response.Write "Seed Page Loaded" 
% > 
< /BODY > 
< /HTML >

HelloWorld1.asp 是这样的:

< %@ LANGUAGE="VBSCRIPT" % > 
< !--#include virtual ="/HelloWorld1.inc"-- > 
< HTML > 
< HEAD >< TITLE >Hello World using little memory< /TITLE >< HEAD > 
< BODY > 
< % 
SayHello 
% > 
< /BODY > 
< /HTML >


HelloWorld1.inc代码是:

< % 
Sub SayHello 
Response.Write "Hello World 1" 
End Sub 
% >


HelloWorld2.asp代码是:

< %@ LANGUAGE="VBSCRIPT" % > 
< !--#include virtual ="/HelloWorld2.inc"-- > 
< HTML > 
< HEAD >< TITLE >Hello World using a lot of memory< /TITLE >< HEAD > 
< BODY > 
< % 
SayHello 
% > 
< /BODY > 
< /HTML >

0 0
原创粉丝点击