字典/客户端VS应用程序变量

时间:2009-10-20 15:46:40

标签: optimization asp-classic vbscript dictionary scripting.dictionary

您好我的服务器性能问题...我有一个经典的asp cms托管~250个网站,每个网站我们使用

构建一个经典ASP字典
set dict = CreateObject("Scripting.Dictionary") 
dict.add "test1","Value Test1"
dict.add "test2","Value Test2"
dict.add "test3","Value Test3"

然后为每个用户在每个页面上加载该词典......

让我们说大约有15万用户访问这些网站每月加载那些每个负载约100k的字典......

我应该使用应用程序变量作为字典,而不是每次都加载我的字典吗?

是否真的会提高我的服务器性能?

3 个答案:

答案 0 :(得分:2)

当然,为每个ASP请求加载字典绝对是一个坏主意,不仅会损害您的性能,还会损害您的虚拟内存。

使用数组仍然有很多相同的问题,每个请求都需要分配保存它所需的所有内存,并且仍然需要填充每个请求。

简单的答案是使用应用程序对象作为字典。这将花费你更少的内存和CPU。缺点是它是否与现有的应用程序对象使用冲突?您可能需要为密钥添加前缀以避免此问题。

答案 1 :(得分:1)

我绝对建议只加载字典一次,因为Dictionary对象在内存方面很重,在查找和较大的方面都很慢:当你认为它应该是在内存中时并不总是被破坏。因此,即使在用户离开页面之后,该对象仍然可以在内存中等待处理(即使您明确地“销毁”它)。现在乘以每个用户每次访问的页面点击次数......

一种替代的更多记忆灯方法是使用一个数组 - 如果你可以在某个地方(最好)保持索引的跟踪,或者如果需要的话,可以使用查找函数进行二维跟踪(当然如果其他人现在或将来都在维护代码。

答案 2 :(得分:1)

我很确定在每个页面上实例化单个scripting.dictionary不应该是任何网站上的问题。如果性能是一个问题,我建议首先分析您的页面以查看问题所在。很有可能在某个地方有一个未经优化的查询需要100多毫秒来完成。

我们运行一个经典的ASP网站,每天处理200k的综合浏览量,并在每个页面上广泛使用scriping.dictionary(25个以上的实例)。我们用它作为各种事物的基础。你有任何示例脚本来显示垃圾收集器并不总是销毁dict吗?或者说,与其他选择相比,它的查找速度很慢?我们遇到的唯一不便是缺乏“克隆”方法。