- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如果我没记错的话,ToList() 方法会迭代所提供集合的每个元素并将它们添加到 List 的新实例并返回此实例。假设一个示例
//using linq
list = Students.Where(s => s.Name == "ABC").ToList();
//traditional way
foreach (var student in Students)
{
if (student.Name == "ABC")
list.Add(student);
}
我认为传统方式更快,因为它只循环一次,而上面的 Linq 为 Where 方法迭代两次,然后为 ToList() 方法迭代两次。
我现在正在从事的项目广泛使用了列表,我看到有很多这样的 ToList() 和其他方法,如果我采用 list<,可以像上面那样做得更好/strong> 变量作为 IEnumerable 并删除 .ToList() 并将其进一步用作 IEnumerable。
这些东西对性能有影响吗?
最佳答案
Do these things make any impact on performance?
这取决于您的代码。大多数时候,使用 LINQ 确实会对性能造成很小的影响。在某些情况下,这种命中对您来说可能很重要,但只有当您知道 LINQ 对您来说太慢时才应避免使用 LINQ(即,如果分析您的代码表明 LINQ 是您的代码缓慢的原因)。
但是您是对的,过于频繁地使用 ToList()
会导致严重的性能问题。您应该仅在必须时才调用 ToList()
。请注意,在某些情况下,添加 ToList()
可以大大提高性能(例如,每次迭代时都从数据库加载集合)。
关于迭代次数:这取决于你所说的“迭代两次”到底是什么意思。如果您计算在某些集合上调用 MoveNext()
的次数,那么是的,以这种方式使用 Where()
会导致迭代两次。操作顺序如下(为简化起见,我假设所有项目都符合条件):
Where()
被调用,暂时没有迭代,Where()
返回一个特殊的可枚举。ToList()
被调用,对从 Where()
返回的枚举对象调用 MoveNext()
。Where()
现在对原始集合调用 MoveNext()
并获取值。Where()
调用您的谓词,它返回 true
。MoveNext()
从 ToList()
调用返回,ToList()
获取值并将其添加到列表中。这意味着如果原始集合中的所有 n 项都符合条件,MoveNext()
将被调用 2n 次,Where()
中的 n 次和 ToList()
中的 n 次。
关于c# - Linq 中的 ToList 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027402/
在 ToList() 中指定具体类型是否有意义? , AsEnumerable()等方法? 威尔.ToList()执行速度比 .ToList() 快? 最佳答案 如果编译器推断出一种类型而您想要指定另
给定在内存中(不是 LINQ to SQL)类列表: List myItems = /*lots and lots of items*/; 我正在使用 GroupBy() 语句对其进行分组: myIt
我对此不是 100%,所以我需要专家的意见。 ConcurrentQueue queue = new ConcurrentQueue(); List listA = queue.ToArray().T
JDK 引入了一个 API Stream.toList() 和 JDK-8180352 。这是我尝试将其性能与现有 Collectors.toList 进行比较的基准测试代码: @BenchmarkM
说到性能,我应该使用 .ToList().Distinct() 还是 .Distinct().ToList() ? 两种扩展方法是否生成相同的 SQL 查询? 看起来第二种方法应该表现更好,但这是真的
当我调用它时: using (var db = new MyDbContext()) { var yy = db.Products.Select(xx => xx.Id); var i
我正在寻找这些 LINQ 表达式的确认/澄清: var context = new SomeCustomDbContext() // LINQ to Entities? var items = co
JDK 16 now includes a toList() method directly on Stream instances。在以前的Java版本中,您始终必须使用collect方法并提供Co
我真的很困惑如何解决这个问题 public bool DeleteVegetationZone(ref Assessment objAssessment, int VegetationZoneIDT
import numpy as np from scipy.sparse import lil_matrix 使用 numpy 我得到 test_mat = (np.ones((4,6))) test
当我有一个 IEnumerable我不知道它是否是一个列表(根据 List ),我必须枚举 IEnumerable以确保我不会枚举那个可枚举项两次(例如循环两次,或类似的事情)。 Resharper
我不知道 LinqQuery.ToList().Distinct() 和 LinqQuery.Distinct().ToList(); 对我来说有什么区别看起来一样。 考虑这个示例代码: List s
给定以下 LINQ 语句,哪个更有效? 一个: public List GetLatestLogEntries() { var logEntries = from entry in db.Lo
我正在尝试使用 Moq 模拟 Entity Framework DbContext,尤其是它的扩展方法 Add()、Tolist() 和 Find()。 我需要 Find() 和 ToList() 方
这个问题在这里已经有了答案: java 8 Collector is not a functional interface, who can tell why? (2 个回答) Java8: Usin
我只是在尝试新的 kotlin 语言。我遇到了生成无限列表的序列。我生成了一个序列并尝试打印前 10 个元素。但是下面的代码没有打印任何东西: fun main(args: Array) {
我们的代码库中都弹出了这两个代码 pandas.DataFrame.columns.values.tolist() pandas.DataFrame.columns.tolist() 这些总是相同的吗
这些 linq 查询有什么区别: Students.Where(x=>x.City == "Lahore").ToList(); Students.ToList().Where(x=>x.City =
我试图通过创建一个存储前 3 个值的单独变量来过滤数组列表。但是,在集合中出现错误。我对此很陌生,所以任何帮助都会很棒! public static ArrayList exerciseDetail(
我看到以下代码: using(var iterator = source.GetEnumerator()) {...} 哪里source是 IEnumerable . 执行上述操作与转换相比有何优势
我是一名优秀的程序员,十分优秀!