Skip to main content
 首页 » 编程设计

c#之在内存中保存一个大集合,用于查询

2024年01月22日22jyk

例如,在我的 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 子句。不会有索引或其他查询优化发生。您将在内存中进行线性搜索!