好吧,我已经在 ASP.NET 项目上工作了一段时间,似乎我做出了一些糟糕的设计选择,随着项目在包含方面变得越来越大,这些选择又回来困扰着我数据。
在阅读了 .NET 内存管理之后,我想我已经确定了一整套潜在的原因。由于我正在做的事情并不是特别特别,我想知道是否有一种标准模式可以实现我想做的事情,而我却没有。
所以我有一个(有点昂贵的查询)产生了 1 到 20000 个结果。在后续请求中,我们可能只是通过结果集进行分页,因此我将此结果存储在 session 中。 session 是 InProc。我想知道:
是否有意义 a) 将结果存储 b) 在 session 中 c) 在进程中?我想要 (a) 的速度。我不知道是否有比由用户 (b) 存储它更有效的方法,如果我使用更复杂的状态服务器——它不会变慢 (c)?或者这可能是解决方案,更快地处理这些大对象,而不是将最后一个结果集保留在 RAM 中直到 session 过期?
如果任何结果集 > ~ 20000 行最终可能会弄乱 LOH,是否有通用的方法来解决这个问题?
我知道这个问题有点不明确。我刚刚意识到我的整体设计可能存在缺陷(w.r.t. 可扩展性),我只是想估计到底有多大缺陷。我希望可以收集一些关于标准模式的提示,将其变成一个普遍有用的问题。
最佳答案
为什么总是返回所有记录??我认为加快查询速度的最佳方法是只返回用户需要的数据.. 所以只返回适合页面的数据!
尝试使用谷歌搜索 ROW_NUMBER() (SQL Server) 或 LIMIT (mySQL)。
这里有2个商品教程
关于c# - 在 session 中缓存搜索结果与保持大对象堆清洁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060004/