【发布时间】:2015-05-20 06:12:35
【问题描述】:
我们有一个 API(具体来说是 ASP.NET Web Api 2),它需要以某种算法方式遍历非常大的实体集合,以便研究所需的结果。
对于执行的每个查询,此集合都是相同的。它为每次调用形成数据“源”。
集合的属性:
- 已订购
- 大型(数十万个对象)
- 只读
- 必须可由应用程序池中的并发线程独立遍历
- 集合中的项目是仅由少数值类型组成的对象。
每次向 API 发出请求时从磁盘或数据库中读取此集合会导致大量开销。所以,我们静态地坚持它,几乎是一个单例。这似乎起作用,因为静态对象在对应用程序的所有请求之间共享,并且与应用程序域具有相同的生命周期。这会导致来自 API 的几乎即时请求。
对于此类问题是否有更好的模式、实践或框架?
【问题讨论】:
-
您是否尝试过使用异步操作?
-
另一种方法是使用某种缓存 - 特别是 ApplicationState 用于存储整个应用程序的生命周期。
-
根据您设置的架构类型,您也许可以将您的集合存储在 Redis 中。这会将内存使用卸载到 Redis,从而使您的应用程序无需管理内存中的大型数据集。您可以在 Redis 存储上设置 TTL 或在应用程序重新启动时删除对象。
-
@Praval'Shaun'Tirubeni:但是从 Redis 读取大量集合不会是性能开销(与将它放在内存中相比)吗?
标签: c# asp.net .net .net-4.5 asp.net-web-api2