gpt4 book ai didi

ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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倍速度差距。不过取得后存取不受影响。  。

最后此篇关于ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验的文章就讲到这里了,如果你想了解更多关于ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com