代码之家  ›  专栏  ›  技术社区  ›  Lil'Monkey

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

  •  5
  • Lil'Monkey  · 技术社区  · 15 年前

    嗨,我有一个关于服务器性能的问题…我有一个经典的ASP CMS托管约250个网站,对于每个网站,我们使用

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

    然后字典会加载到每个用户的每个页面上…

    假设我们有大约15万用户访问这些网站,每个月加载大约10万本字典。

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

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   AnthonyWJones    15 年前

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

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

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

        2
  •  1
  •   Cirieno    15 年前

    我绝对建议只加载一次字典,因为字典对象在内存方面很重,在查找方面很慢,而且很大:在您认为应该加载的时候,不会总是在内存中销毁它。因此,即使在用户离开页面后,此对象仍可以在内存中逗留,等待释放(即使您显式地“销毁”它)。现在乘以每个用户每次访问的页面点击量…

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

        3
  •  1
  •   Joost Moesker    15 年前

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

    我们运行一个典型的ASP站点,每天处理20万个页面视图,并在每一页(25个以上实例)上广泛使用scriping.dictionary。我们把它作为各种事物的基础。你有没有任何示范脚本来证明录音不总是被垃圾收集者销毁?或者它的查找速度比任何其他方法都慢?我们遇到的唯一不便是缺少“clone”方法。