【发布时间】:2016-08-10 21:33:51
【问题描述】:
不重复:我不觉得这是重复的,因为在我的具体情况下,我觉得忽略警告实际上更好。
例如,
IEnumerable<Item> milionItems = GetAMillionItemsFromDatabase();
var item1 = millionItems.FirstOrDefault(x=> x.Condition == "Excellent");
var item2 = millionItems.FirstOrDefault(x=> x.Condition == "Good");
我在“millionItems”下收到警告消息,我知道这意味着什么,但我不确定是否总是值得 ToList'ing 只是为了摆脱它。
GetAMillionItemsFromDatabase().ToList();
这在性能方面似乎很糟糕,因为它会一次将一百万条记录带入内存。
但是,如果我不这样做并继续枚举 IEnumerable,即使它会访问数据库两次,它也不会将所有数据带入,因为它会找到第一个匹配项并返回。在这种情况下,在我看来,实际上忽略该消息会更好。
【问题讨论】:
-
当然,忽略警告可以安全。这取决于枚举的内容。如果您尝试枚举它们两次,一些实现
IEnumerable的类将返回一个空集合。您需要确定最适合您的情况:将所有项目保存在一个列表中,进行多次可能昂贵的数据库调用,或者甚至可能放弃 LINQ 并编写一个循环,一次通过数据。Enumerable.Aggregate可能在这种情况下也有用。
标签: c# optimization resharper ienumerable