我目前正在开发一个大型网站,该网站非常动态,因此需要在内存中近乎永久性地存储大量信息(例如结帐的配置设置或用于实现的树菜单结构)。
此信息不是特定于会话的,它对于使用该网站的每个线程都是一致的。
在 ASP 中全局保存这些数据的最佳方式是什么,以便在需要时可以访问它,而不是在每次使用时重新加载?
我目前正在开发一个大型网站,该网站非常动态,因此需要在内存中近乎永久性地存储大量信息(例如结帐的配置设置或用于实现的树菜单结构)。
此信息不是特定于会话的,它对于使用该网站的每个线程都是一致的。
在 ASP 中全局保存这些数据的最佳方式是什么,以便在需要时可以访问它,而不是在每次使用时重新加载?
不清楚您的信息是否是特定于会话的……如果是,则使用 ASP 会话对象。鉴于您对比例的描述,您可能希望查看在 Sql Server 中存储状态:
http://support.microsoft.com/kb/317604
这就是101方法。如果您正在寻找更强大的东西,请查看 memcached(发音为 Mem-Cache-Dee):
http://www.danga.com/memcached/
这就是 Facebook 和 Twitter 等应用程序使用的系统。
祝你好运!
我认为使用 ASP.NET 缓存功能是一个不错的选择。除了 John 的回答,您还可以使用 Microsoft 的 Patterns & Practices 团队的Caching Application Block。
这是一个很好的视频,探索了保留应用程序状态的不同方法。 http://www.asp.net/learn/3.5-videos/video-11.aspx 它刷在 Application 对象上,该对象对整个应用程序、所有用户都是全局的,并向您展示如何创建命中计数器(显然存储一个整数,你可以存储对象)。如果您需要进行更改,您确实需要使用并发锁,而且我不确定它如何处理大量数据,因为我从来不需要在那里保留那么多。
我通常将类似的东西保存在 Application 对象中。
如果页面相互依赖并且相互发布,则可以使用页面的请求对象。可能不是您正在寻找的答案,但绝对是要使用的最小内存之一。
我过去也遇到过同样的情况,发现界面是最具可扩展性的解决方案。应用程序缓存可能是今天的答案,但它会扩展以满足您的需求吗?
如果您需要扩大规模,您可能会发现 cookie 或某种类型的临时数据库存储是诀窍。只需向您的界面添加一个新方法,然后将界面设置为从 web.config 中选择“模式”。