【发布时间】:2012-04-06 01:29:12
【问题描述】:
我坚信用硬件来解决软件问题并不是最好的策略。因此,当注意到我们的一台服务器(当前运行 2 个演出)存在一些内存问题时,我将其归结为 System.Web.HttpRuntime.Cache 的使用。虽然对于几个网站来说,这是有道理的,50 个网站都使用 System.Web.HttpRuntime.Cache 开始倒塌。
如果没有外部缓存服务器的选项,我正在考虑修改代码以使用静态类或单例来保留全局数据(另一种选择是发出额外的数据库请求)。
我不完全清楚这是否会有任何变化,因为数据仍在“内存中”,我们可能只需要在服务器上投入更多内存。
使用 System.Web.HttpRuntime.Cache 是否比单例类或静态类有更多的开销,有哪些推荐的方法来解决这个问题?
-- 更新--
在监控当前文件缓存内存使用情况时,我注意到这个数字在我访问同一个应用程序池上的一些站点时出现了峰值。这个数字跃升至 1,000,000(我假设的字节数)。我注意到随着 Active Flushed Entries 的数量增加然后减少,这个数字最终开始减少。
我怎样才能更快地清除它,因为当多个应用程序池中的这个数字很高时,问题似乎就开始了?
与其只是删除缓存(正如建议的那样,这可能不是最好的主意),不如简单地为缓存对象设置一个更快的过期时间可能会产生更好的结果?
【问题讨论】:
-
仅仅结束当前的缓存也不一定是最好的策略,因为我不会说这将是一个问题固有 - 也许更值得看看什么问题站点实际上正在使用缓存并解决它。
-
每个站点的配置属性都包含在一个数据库中。当站点加载时,配置对象存储在缓存中。与其使用胖的复杂对象(包含实体关系),不如使用更简单的扁平对象会限制内存消耗,但最终会在添加更多站点时导致同样的问题。
标签: singleton asp.net-4.0 http-caching static-classes