通过遍历Application,我们可以很容易地得到每一个Application。但Application中可以保存不同的数据,以及数组,这就给我们确定一个Application对象占用的内存大小带来了麻烦。不过,ASP还是留给了我们一条途径,可以取得每隔一Application对象的大小,这条途径就是在ASP中不常用的JavaScript。
在ASP文件中,除了<% %>标记内是VBScript代码以外,我们还可以在此标记之外编写一段JavaScript的代码,不仅如此,我们还可以在 <% %> 中的VBScript脚本调用到我们用JavaScript写的脚本。这样就好办了,我们可以用VBScript遍历Application,并写一个JavaScript的函数来计算每一个Application占用了多少内存。
遍历Application的代码就不写了,这里只给出JavaScript部分的代码。
function sizeof(app){
// 对数组进行递归
if(typeof app == "object"){
try{
if(app.constructor == Array){
var sizecount = 0;
for(var arritem in app){
sizecount += sizeof(app[arritem]);
}
return sizecount;
}
}catch(e1){}
}
//日期
if(typeof app == "date"){
return 18;
}
//数字
else if(typeof app == "number"){
return 4;
}
//字符串
else if(typeof app == "string"){
return app.toString(app.toString).length * 2; //因为ASP是以Unicode保存字符串的哦,所以必须乘以2,下面也是
}
//其他的全部当做XMLDOM
else{
try{
return app.xml.toString(app.xml).length * 2;
}
catch(e){
return 0;
}
}
}
即使是使用JavaScript写的函数,它也是能进行递归调用的,于是我们就用递归来遍历数组里面的函数。这样即使数组里面还有数组,再里面还有数组,再再里面还有数组,再再再里面……我们都能计算其中每一个元素占用的内存。
数组递归代码以后,就开始通过数据类型判断这个Application占用的内存大小。JavaScript在这里就发挥出它的特别作用了,VBScript不能很好地判断数据类型,而JavaScript就可以轻易做到这一点。日期占用18个字节,数字全部当做长整型占4个字节,字符串比较特俗,在JavaScript中调用String.length函数得到的是字符个数(一个中文也只算一个字符),而在ASP中字符串是用Unicode保存的,所以在这里我们将String.length的结果乘以2,并返回。
最后那个XML是我自己加上去的,因为我知道我的Application中有XMLDOM对象,所以特别加了这一段代码进行处理。如果你知道你的Application有可能出现什么样的对象,你也可以加上相应的处理代码。
最后的结果就差不多是所有Application占用的内存了,当然这个结果并不准确,因为我们只能粗略估计。时间日期我们全当做18个字节,数字也全部当做长整型,另外还有服务器管理Application的额外内存开销,以及保存数组维数下标等信息额外占用的内存,这些都影响了最后的结果。在大多数情况下,这些影响并不大,因此结果还是可以作为一个估计值的。
这是应用在YTSM中的一个功能,便于偶监视当前Application占用了多少内存的。
最后补充,上面可能没有说清楚。在同一个ASP页面中,我们是可以同时使用VBScript和JavaScript的,只要将VBScript放在 <% %> 中,而将JavaScript放在 <script runat=”server” language=”javascript”></script> 就可以了。VBScript部分的代码同样可以调用到用JavaScript写的函数。
F-22's Trace
greensea 的个人主页
sky-city
极夜奁
小樱之町
哑……
话说这里是澳大利亚还是西班牙?
为什么都是听不懂的语言哟~(笑眯眯)
怎么办私是不是跟不上时代了OTL
还有兔宝宝私一直都很~正常哟哟~~=333=
很明显已经不正常了 = =
据说灭屏蔽html代码?
而将JavaScript放在 就可以了
= =
还要自己写转义,转麻烦
明天再改好了
话说看不懂…所以PIA!
都没有什么值得YY的内容,去问问猫叔好了
猫叔?哪个?