寻找在asp.net中有效管理1mb会话数据的解决方案

时间:2011-11-22 07:21:44

标签: asp.net iis caching session-state

这个问题是关于.net的表现。 我有一个项目,在网格中显示10,000个产品信息。

.net项目我们使用HTML表来显示信息。一次显示页面中的500条记录。点击页码后,会显示相关的页面信息。

网格有动作,删除,分组,排序,过滤。 为了实现这一目标,我们目前正在从DB中提取所有10,000个产品信息(这个小计结果实际上是从2个DB调用和2个Web服务调用中检索到的)并将它们保存在会话中,稍后从session.each页面检索页面数据通过ajax调用 - 每个ajax调用从session -resultset

中获取相关的页面数据

现在,这在SQL服务器中维护会话的生产中有巨大的性能损失,

我正在寻找一种有效管理此结果对象(每个用户1mb数据)的解决方案。 调用服务和数据库来获取每个页面数据的次数很多。

由于 SNA

2 个答案:

答案 0 :(得分:3)

您真的需要为每个用户复制数据库中的所有10,000条记录吗?如果每个用户的10,000个或多或少相同,那么您可能需要cache the data关于产品并仅存储对缓存的引用(即主键,内存地址等)。

除产品列表外,您在会话中存储了哪些信息?你有多少用户?也许您将数据分开,使用IIS in-memory sessions获取最重要且经常请求的数据,其余部分放入SQL Server或仅使用IIS内存中的会话(如果您的服务器有足够的容量)。

最后,如果这没有帮助,那么您可能需要更改SLA并减少存储在用户会话中的产品数量,而不是根据需要从数据库中重新查询它们。这不是最佳选择,但也许90%的用户都不会注意到任何事情。

答案 1 :(得分:0)

听起来你有这些选择:

  1. 确实没有必要将所有产品发送给用户。使用ajax可以轻松处理大量项目,而无需将所有项目都推送给用户。

  2. 存储项目客户端。 Cookies不是一种选择,因为它们无法存储1mb数据。 HTML5有一个名为LocalStorage的东西你可以使用(但需要你的用户使用现代浏览器)。在此处尝试LocalStorage:http://www.quirksmode.org/html5/tests/storage.html

  3. 存储表服务器端。即将所有内容加载到应用程序存储中,并仅在每个会话中存储密钥。您还可以使用外部缓存(What are the advantages of Memcached compared to .NET Cache system?