例如,在我的ASP.Net应用程序中,无限期地将IEnumerable保存在内存中是否可以?
例如:
每天早上,我的asp.net mvc应用程序需要从CSV文件加载数据.这些数据是从几个CSV文件加载的,然后使用LINQ连接等.它被合并为一个单独的,非规范化的集合,大约500,000个"东西"
应用程序的唯一目的是查询此数据.方法如:
GetThingsByName
GetThingsByPrice
等等...
我的想法是只有控制器可以调用的静态IEnumerable ..?
它将在专用服务器上运行......
基本上,我试图避免使用数据库(任何类型,NoSQL或其他),因为我不认为它是必需的,因为数据是相当不稳定的.
查询将使用LINQ完成.
我同意帕维尔的观点.它还高度依赖于您将要运行的查询类型.如果您正在进行大量聚合,那么您可能需要像SQLite这样的内存数据库,甚至可能需要像MySQL或SQL Server这样的完整数据库.如果您只是通过PK进行查找,则可能会将数据存储在HashMap或类似内容中.
IEnumerable和LINQ-to-Objects并不神奇.它们只是为查询和聚合提供了一个通用接口.如果您的IEnumerable的实际实现类是List,猜猜是什么?当你说:
var query = from item in items // items is a Listwhere item.Name.StartsWith("Foo") && item.CreationDate > new DateTime(2010,1,1) select item; var allFoos = query.ToList();
然后LINQ-to-Objects将遍历内存中的所有500,000个对象,检查是否满足where子句.将不会发生索引或其他查询优化.你将通过内存进行线性搜索!