Application对象内置集合有为存放简单类型设计的Contents,默认Application("key")就可以使用。

不过Application.Contents不能存放对象,可以存vbs数组,但是在javascript下甚至数组都不能放。

使用Application.Contents时,只能用丑陋的如:

for(var i=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是不允许直接访问的。
  <object id="dict" runat="server" scope="Application" progid="Scripting.Dictionary"></object>

 Scripting.Dictionary本身的速度很快,不会对比较StaticObjects集合速度造成太大影响.

 Dictionary的速度:
    var d=new ActiveXObject("Scripting.Dictionary");
    for(var i=0;i<15000;i++){
        d.Item(i)="sdfdsffdsaf";}
  1.5w次插值,172ms
 当然自定义对象var d=new Object(); d[i]=..更快,1.5w次只要80-90ms,不过功能弱多了,所以还是用字典.

 下面看正式测试
    for(var i=0;i<15000;i++){
        Application.Lock();
        Application.StaticObjects("dict").Item(i)="sdfdsffdsaf";
        Application.Unlock();}
 时间长达6953ms,初步判断StaticObjects集合的访问速度是不能满足Cache的要求了,这个速度和ADO OLEDB读sql server 2000的时间相差无几。

 不过还不打算马上放弃,因为StaticObjects的优势在于可以存放Object,而Dictionary也可以存放其它对象,这样可以做为缓存对象,而不仅仅是数据。  

我在Application.StaticObjects("dict")里面再放入一个Object:
  Application.StaticObjects("dict").Item("o")=new Object();

    for(var i=0;i<15000;i++){
       Application.Lock();
       Application.StaticObjects("dict").Item("o")[i]="sdfdsffdsaf";
       Application.Unlock();}

  6656ms,快了点点.多一层Object并没有降低速度,那么速度的慢并非结构复杂,而是StaticObjects的访问占用。

 把dict的引用预存
 var t=Application.StaticObjects("dict");

    for(var i=0;i<15000;i++){
       Application.Lock();
       t.Item("o")[i]="sdfdsffdsaf";
       Application.Unlock();}

  3094ms,成功的减少一半多点的时间,js中屡试不爽的预存策略,要是把t.Item("o")也预存呢?

 var t=Application.StaticObjects("dict").Item("o");

    for(var i=0;i<15000;i++){
       Application.Lock();
       t[i]="sdfdsffdsaf";
       Application.Unlock();}

  125ms,终于成功了,只有Application.Contents的一半。看来时间主要花费在取得'引用',而不是StaticObjects内存区被保护慢。StaticObjects相对Contents安全措施更好,因为里面要存对象。

  靠Dictionary强大的功能,适当的封装一下,用put(),get(),contains()等等流行方法访问,就是一个强大的Cache了。

 ////备注
  我封装了一个.sct组件;asp javascript写的,有空发上来,今天到此。

  测试了取得Contens和StaticObjects引用的速度,在20次时都是0ms,100次大约5倍速度,500-1500次是10倍速度差距。不过取得后存取不受影响。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?