5

嗨,我有一个关于我的服务器性能的问题......我有一个经典的 asp cms 托管约 250 个网站,我们为每个网站构建一个经典的 ASP 字典,使用

set dict = CreateObject("Scripting.Dictionary") 
dict.add "test1","Value Test1"
dict.add "test2","Value Test2"
dict.add "test3","Value Test3"

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

假设我们每月有大约 150 000 名用户访问这些网站,每次加载大约 100k 的字典...

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

它真的会提高我的服务器性能吗?

4

3 回答 3

2

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

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

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

于 2009-10-21T12:49:36.907 回答
1

我很确定在每个页面上实例化一个 scripting.dictionary 在任何网站上都不应该成为问题。如果性能是一个问题,我建议先分析你的页面,看看问题出在哪里。很有可能在某处需要 100 多毫秒才能完成未优化的查询。

我们运行一个经典的 ASP 站点,该站点每天处理 200k 的页面浏览量,并在每个页面(超过 25 个实例)上广泛使用 scriping.dictionary。我们用它作为各种事物的基础。你有任何示例脚本来表明字典并不总是被垃圾收集器破坏吗?或者与任何替代方案相比,它的查找速度很慢?我们遇到的唯一不便是缺少“克隆”方法。

于 2009-10-21T07:27:01.423 回答
1

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

另一种更容易记忆的方法是使用数组——如果你可以在某个地方(最好)保持对索引的跟踪,则为一维,如果需要,则使用查找函数为二维(当然,如果其他人正在维护现在或将来的代码)。

于 2009-10-20T18:11:00.770 回答