Scripting.Dictionary --- 关于ASP Cache的改进探讨

发布:2010-06-26 09:52   点击356次   评论:0

在ASP中我们难免使用一些Cache来缓存各种常用数据。这些数据可能是基本类型,可能是数组,可能是对象。而简单地使用Application难免会造成一些性能问题。比如缓存丢失、网站运行速度减慢等。

由于平时应用中,我们往往要同时使用多个变量(比如网站基本配置参数),而这些变量的数量十分多,我并不希望将他们一一划分开来储存进单独的Application中去。我更期待我能只读取一次Application,然后就可以将整个变量串全部获取出来。我也不是十分想用数组,因为下标经常会造成逻辑上的混乱,给引用带来不便。

Scripting.Dictionary是一个十分切合我这些应用的组件。我可以使用类似Object.Item(“Key”)的方式来读取我所需求的各个变量。而Scripting.Dictionary本身的处理速度也是十分快的。现在推崇的对Application一个比较理想的改进,即是将Dictionary与Application的StaticObjects结合起来。在global.asa中加入

< id=”dict” runat=”server” scope=”Application” progid=”Scripting.Dictionary”>

然后使用 Application.StaticObjects("dict") 来引用这个Dictionary对象。

这样的改进效率十分高。几乎没有影响Application的效率(甚至有了部分提升!)。

创建dictionary对象50000次花费时间:1.046875s
dictionary写50000次花费时间:.3125s
dictionary读50000次花费时间:.3125s
写Application 15000次花费时间:5.234375s
读Application 15000次花费时间:5.203125s
写Application dictionary 15000次花费时间:4.921875s
读Application dictionary 15000次花费时间:4.5625s
以上代码中,Application Dictionary的引用语句是

Application.StaticObjects("dict").Item(i)
可以看到,就这样,效率已经十分令人满意了。但是我们还不知足。可以猜想,是

Application.StaticObjects("dict")这个引用拖慢了语句的速度,于是我们尝试可以加上一句引用语句来提速。结果如下,让人十分满意

做引用改进后:Set d = Application.StaticObjects("dict")
引用Application dictionary 15000次花费时间:1.0625s
写Application dictionary 15000次花费时间:3.234375s
读Application dictionary 15000次花费时间:3.3125s
“引用Application dictionary 15000次”测试的是

Set d = Application.StaticObjects("dict")
这句语句的运行效率。而实际运行中,这句话的应用并没有那么频繁(同一页面我们只要做一次引用就足够了)。由此看见,引用之后效率相当可观

在长期的ASP应用中,我也曾设想设计一个ASP文件CACHE机制。将CACHE以赋值语句的形式存入ASP文件中(即生成一堆变量),然后在应用页面中INCLUDE。本想INCLUDE文件的操作IIS会进行编译缓存,所以效率应该比APPLICATION还要高。为了证明这个设想,我也做了一个测试。j结果:

生成15000个变量(Execute)并赋值花费时间:.359375s
15000次include文件(包含5000个赋值语句)花费时间:19.60938s
15000次include文件(空文件)花费时间:18.92188s
大吃一惊!效率太低了!

由此看来,也许最高效的办法是将变量存入Application中去,然后Execute?
本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2010/0323/21272.php

关于 GitHub 导航 部门 反馈

提示:`/home.php`入口数据仅为演示功能,不构成任何交易凭证,也不承担相关风险和责任!

Copyright © 2011-2018 xxxxx.com All rights reserved.

Run:4.028/33.832(ms); 6(sql)/2.689(MB); comm:news/detail; Upd:2024-05-17 14:10:36