【问题标题】:Performance : asp.net Cache versus singleton性能:asp.net 缓存与单例
【发布时间】:2011-06-28 18:18:24
【问题描述】:

我有一个应用程序通过 Web 服务访问数据库中的数据。 出于性能目的,我将所有应用程序参数存储在缓存中,否则我会在每个页面请求上调用 Web 服务。 这些参数的一些示例是要显示的搜索结果的数量,或者应该显示或不显示的信息。 参数存储在数据库中,因为它们是通过 Windows 管理应用程序进行编辑的。 所以我的问题来了,因为这些参数不必过期(我将它们存储了几个小时),将它们存储在静态变量中会更有效吗,比如单例? 你怎么看?

【问题讨论】:

    标签: asp.net performance caching singleton


    【解决方案1】:

    我认为将参数存储在 HttpCacheSingleton 对象中不会有明显的性能差异。无论哪种方式,您都需要在应用启动时加载参数。

    使用HttpCache 的优点是它已经被构建为处理过期和刷新,我假设你会想要的。如果您从不想要刷新参数,那么我想您可以使用单例,因为它很简单。

    构建您自己的自定义类的好处是您可以获得一些静态类型的参数,因为您从HttpCache 获取的所有内容都将是object。但是,为 HttpCache 构建自己的包装器将是微不足道的,它将返回一个强类型的对象。

    【讨论】:

    • 这些参数不必刷新,除了可能一天晚上一次。事实上,如果它们在应用程序正在使用时不刷新会更好。但我只是在这里谈论性能,给我带来的问题是,我认为缓存需要做的工作不仅仅是存储数据,比如处理所说的过期,并通过他的密钥检索数据。但我想知道它有多重要。嗯,我试试看可能很快就有回复了……
    • 如果数据必须每天刷新一次,这仍然很重要。您可以将 HttpCache 设置为在午夜刷新这些对象,然后在此之前它不会过期。注意不要陷入任何过早的优化;-)
    • 将其存储在缓存中例如 24 小时,并不能保证数据将在 24 小时内保存。如果服务器由于某种原因内存不足,数据将被刷新。如果池回收,数据也将被刷新。我想在池回收的情况下单例也会被刷新。而且我们已经有了一个工具来加载该数据,这样第一个访问该站点的客户端就不必等待所有参数都加载完毕。其中有很多......但这仍然是一个关于过早优化的好建议;-)我正在测试它主要是为了满足我自己的好奇心。
    • 是的,问题是,无论哪种方式,如果池重置,您都会从内存中丢失这些对象。如果我们谈论的是大量数据(我的印象是只有几个字段),您可以将数据存储在进程外......基本上在服务器上有一个本地存储来保存这些数据并且可以将其提供给您的应用程序。然后,只要此过程正在运行,您就可以访问您的参数。
    • 在测试了大约 25% 的缓存数据并且可以编码为单例后,我在测试结果上获得了大约 10% 的性能。但我仍然希望有人对此给出合理的解释......
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2019-07-14
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多