例如,在我的 ASP.Net 应用程序中无限期地在内存中保存一个 IEnumerable 是否可以?
例如:
每天早上,我的 asp.net mvc 应用程序都需要从 CSV 文件加载数据。 此数据从一些 CSV 文件加载,然后使用 LINQ 连接等。它被合并到一个单一的、非规范化的集合中,包含大约 500,000 个“事物”
应用程序的唯一目的是查询此数据。 方法如:
- 获取事物名称
- GetThingsByPrice
等...
我的想法是只拥有一个 Controller 可以调用的静态 IEnumerable ......?
它将在专用服务器上运行...
基本上,我试图避免使用数据库(任何类型,NoSQL 或其他),因为我认为不需要它,因为数据相当不稳定。
查询将使用 LINQ 完成。
最佳答案
我同意帕维尔的观点。它还高度依赖于您将要运行的查询类型。如果您要进行大量聚合,您可能需要像 SQLite 这样的内存数据库,甚至可能需要像 MySQL 或 SQL Server 这样的成熟数据库。如果您只是通过 PK 进行查找,则可以将数据存储在 HashMap 或类似文件中。
IEnumerable 和 LINQ-to-Objects 并不神奇。它们只是提供一个用于查询和聚合的通用接口(interface)。如果您的 IEnumerable 的实际实现类是一个列表,您猜怎么着?当你说:
var query = from item in items // items is a List<T>
where item.Name.StartsWith("Foo")
&& item.CreationDate > new DateTime(2010,1,1)
select item;
var allFoos = query.ToList();
然后 LINQ-to-Objects 将遍历内存中的所有 500,000 个对象,检查是否满足 where 子句。不会有索引或其他查询优化发生。您将在内存中进行线性搜索!
关于c# - 在内存中保存一个大集合,用于查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201294/