在ASP中估计Application占用的内存大小

通过遍历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写的函数。

This entry was posted in 网页开发 and tagged , , , . Bookmark the permalink.

6 thoughts on “在ASP中估计Application占用的内存大小

  1. 哑……

    话说这里是澳大利亚还是西班牙?

    为什么都是听不懂的语言哟~(笑眯眯)

    怎么办私是不是跟不上时代了OTL

    还有兔宝宝私一直都很~正常哟哟~~=333=

发表评论

电子邮件地址不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>