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

标签 c# asp.net

例如,在我的 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/

相关文章:

javascript - C# 中嵌套引号的可能级别是多少?

c# - 如何在内容占位符中循环控件

c# - 如何用asp c#编译c程序

c# - 如何在应用程序运行时更改图片框的大小

c# - 如何在 Azure 中运行安全的 Service Fabric 有状态服务?

java - 从 C# WebService 生成的 JSON 字符串获取值

c# - Microsoft.Xrm.Sdk.EntityReference.Equals(obj) 行为

c# - 禁用 asp 图像按钮

c# - AcquireTokenSilent 无法静默获取 token ?

c# - 简单的 IEqualityComparer<T> 问题