时间:2021-05-28
Application对象内置集合有为存放简单类型设计的Contents,默认Application("key")就可以使用。
不过Application.Contents不能存放对象,可以存vbs数组,但是在javascript下甚至数组都不能放。
使用Application.Contents时,只能用丑陋的如:
for(vari=0;i<15000;i++){
Application.Lock();
//Application.Contents(i)="sdfdsffdsaf";
Application(i)="sdfdsffdsaf";
Application.Unlock();}
在这里往Application.Contents存放了1.5w个String,共花费时间234ms.
改用Application.StaticObjects后:
定义一个Dictionary作为StaticObject,用于存放数据,因为StaticObject是不允许直接访问的。
<objectid="dict"runat="server"scope="Application"progid="Scripting.Dictionary"></object>
Scripting.Dictionary本身的速度很快,不会对比较StaticObjects集合速度造成太大影响.
Dictionary的速度:
vard=newActiveXObject("Scripting.Dictionary");
for(vari=0;i<15000;i++){
d.Item(i)="sdfdsffdsaf";}
1.5w次插值,172ms
当然自定义对象vard=newObject();d[i]=..更快,1.5w次只要80-90ms,不过功能弱多了,所以还是用字典.
下面看正式测试
for(vari=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item(i)="sdfdsffdsaf";
Application.Unlock();}
时间长达6953ms,初步判断StaticObjects集合的访问速度是不能满足Cache的要求了,这个速度和ADOOLEDB读sqlserver2000的时间相差无几。
不过还不打算马上放弃,因为StaticObjects的优势在于可以存放Object,而Dictionary也可以存放其它对象,这样可以做为缓存对象,而不仅仅是数据。
我在Application.StaticObjects("dict")里面再放入一个Object:
Application.StaticObjects("dict").Item("o")=newObject();
for(vari=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
6656ms,快了点点.多一层Object并没有降低速度,那么速度的慢并非结构复杂,而是StaticObjects的访问占用。
把dict的引用预存
vart=Application.StaticObjects("dict");
for(vari=0;i<15000;i++){
Application.Lock();
t.Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
3094ms,成功的减少一半多点的时间,js中屡试不爽的预存策略,要是把t.Item("o")也预存呢?
vart=Application.StaticObjects("dict").Item("o");
for(vari=0;i<15000;i++){
Application.Lock();
t[i]="sdfdsffdsaf";
Application.Unlock();}
125ms,终于成功了,只有Application.Contents的一半。看来时间主要花费在取得'引用',而不是StaticObjects内存区被保护慢。StaticObjects相对Contents安全措施更好,因为里面要存对象。
靠Dictionary强大的功能,适当的封装一下,用put(),get(),contains()等等流行方法访问,就是一个强大的Cache了。
////备注
我封装了一个.sct组件;aspjavascript写的,有空发上来,今天到此。
测试了取得Contens和StaticObjects引用的速度,在20次时都是0ms,100次大约5倍速度,500-1500次是10倍速度差距。不过取得后存取不受影响。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了ASP.NET中Application全局对象用法。分享给大家供大家参考。具体如下:Application是应用全局对象,被全体共享。无论通过哪个
导读:本文介绍了在ASP中使用Global.asa文件中的Session和Application两个对象记录在线用户数量的方法。网络的访问量是每一个做网站的网友
Intro#在asp.net中,我们可以借助Application来保存一些服务器端全局变量,比如说服务器端同时在线的人数计数,比如一些网站的配置信息。在ASP
本文系统地讲解了ASP.NET中Session对象的应用方法。1、Session对象简介Application对象存储的信息是整个应用程序所共享的全局信息,每一
application/x-ponent做字符转换总结一下ajax提交数据乱码一些经验为了避免乱码,可以做到以下几步解决方法1,保持编码的统一,包括文件编码,数