【发布时间】:2014-11-13 03:57:17
【问题描述】:
我在内存中有一个 List
根据 QueryString,我需要过滤该产品列表并将转发器绑定到它。
所以我将 LINQ .Where 子句应用于我的列表,但正如您所知,Where 返回 IEnumerable
如果我有
var category = "Beverages";
var filteredProducts = allProducts.Where(p => p.Category = category);
当我调用filteredProducts.ToList() 会发生什么?
注意 allProducts 是一个 List
我猜它会在内存中创建一个新的 List
过滤后的产品约为。 60 项。
这在性能方面有多糟糕?
编辑:它是一个网络应用程序,所以我们正在谈论假设一次对这个页面的数十个请求,这可能会影响性能。
【问题讨论】:
-
可能比您编写自己的循环将它们放入列表中更好。顺便说一句,你的问题没有一个明确的答案,它是一种开放式的
-
60 项....小菜一碟
-
没关系。就性能而言,您不会注意到 60 或 300。当你达到数百万的规模时,你可能想回顾一下
-
无论如何它只会复制引用(我假设你有一个类而不是结构)。从记忆的角度来看没有什么风险。
-
您的评论“我猜它会在内存中创建一个新的 List
并从 allProducts 列表中复制相关项目。”是错的。它不会复制相关项目。它将为您提供一个新列表,其中包含 60 个对原始列表中相同对象的引用。如果您更改这些对象中的某些内容,它们将在两个集合中发生更改。