c# - 在 session 中缓存搜索结果与保持大对象堆清洁

标签 c# asp.net session-state out-of-memory large-object-heap

好吧,我已经在 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个商品教程

1) ScottGu's Blog

2) 15 Second Tutorial

关于c# - 在 session 中缓存搜索结果与保持大对象堆清洁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060004/

相关文章:

c# - 如何更改文本框中乌尔都语字符的字体系列

c# - 双击进度条后打开的窗口立即拖入后台

C# 和 MongoDB 使用 ObjectId 列表删除记录

.net - 如何从 asp.net 将 aspnetdb.mdf 附加到 sql server 2008 R2 的本地实例?

c# - Principal Role App 引用的属性必须与 EntityType 的键完全相同

node.js - 如何从 Redis 保存和检索 session

azure - 在 Windows Azure 共享缓存中,无法在美国东部或美国西部区域启动缓存 - 为什么?

c# - 如果 DateTime 对象不能为 null,那么在赋值之前它是什么?

C#:HttpStatusCode 中的 MovedPermanently 和 Moved 有什么区别

session-state - IIS Express 不保留 session 数据