与我合作的许多开发人员都觉得使用List
而不是IENumable
(例如)更舒服。我想知道ToList()
过度使用是否会影响性能。例如,或者,在排序后将使用ToList()
再次返回列表,即。
private void ListThinger(List<T> input)
{
input = input.OrderBy(s => s.Thing).ToList();
foreach(var thing in input)
{
// do things
}
}
我的问题是:
ToList()
的成本?IENumable
,然后在其上调用ToList()
,它会只返回原始对象吗?附言:我知道单次使用 ToList 不会破坏任何后退,但我们正在构建一个当前受 CPU 限制的高度并发系统,所以我正在寻找一些小的胜利,当扩展时,将带来很大的改进
自己试试:
var list = new List<int>();
bool areListsTheSame = list == ((IEnumerable<int>)list).ToList();
ToList()方法的效率如何?假设内容是POCO,它会创建一个新列表吗?这需要多少内存?如果它是值类型而不是POCO,这种情况会改变吗?
ToList()
方法通过创建一个新列表并用给定集合的项填充它来具体化给定集合。Linq.ToList()
实现:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
return new List<TSource>(source);
}
通过这样做,你没有获得必要的强制执行的权力
列表的大小将决定效率还是列表的大小不决定ToList()的成本?
当它调用< code>List的复制构造函数并创建一个新列表时,它将对每个项目进行操作。所以它将在< code>O(n)中运行,这意味着列表的大小很重要。有关复制构造函数操作的MSDNs文档:
初始化 List 类的新实例,该实例包含从指定集合复制的元素,并且具有足够的容量来容纳复制的元素数。
正如@Jason在下面的评论中提到的,复制构造函数是智能且高效的,但是在不需要的时候执行它仍然是一个不必发生的< code>O(n)操作
如果一个列表被强制转换为 IEnumerable,然后对其调用 ToList(),它会只返回原始对象吗?
否。它将创建一个如上所示的新列表
至于您的示例代码:
input = input.OrderBy(s => s.Thing).ToList();
foreach(var thing in input)
{
// do things
}
由于您正在获取一个物化列表(而不是一个可能在定义执行中执行的< code > iquerable /< code > IEnumerable ),所以在添加之后添加< code>ToList对您没有任何好处。
您可以看这里,可能还会有所帮助:何时使用LINQ的. ToList()或. ToArray()
在这种情况下,接口的所有不同实现是如何表现的?当选择一种实现而不是另一种实现时,利弊是什么?
问题内容: 我有一个可能包含数千个对象的模型。我想知道什么是最有效的方式来存储它们并在获得ID后检索单个对象。ID是长数字。 这些是我正在考虑的两个选项。在选项一中,它是一个带有递增索引的简单数组。在选项2中,如果有区别,它是一个关联数组,也可能是一个对象。我的问题是,当我主要需要检索单个对象时,有时又遍历它们并进行排序时,哪一个效率更高。 具有非关联数组的选项一: 选项2与关联数组: 更新: 好
据说Java的默认序列化机制效率不高,因为a)它通过反射发现要写入/读取哪些字段,这通常很慢b)它将额外的数据写入流。 提高效率的一种方法是实现Externalizable及其writeExternal/readExternal方法。 问题是:如果我改为提供“writeObject/readObject”方法,并且不在其中调用deafiltWriteObject/defaultReadObject
CPython 作为最流行的 Python 环境,对于 CPU 密集型任务较慢,而 PyPy 则较快。 使用稍作改动的 David Beazley 的 CPU 密集测试代码(增加了多重循环进行多轮测试), 可以看到 CPython 与 PyPy 之间的执行差距。 # PyPy $ ./pypy -V Python 2.7.1 (7773f8fc4223, Nov 18 2011, 18:47:10
【代码效率】页面主要反馈和分析项目运行过程中代码的 “CPU占用时间” 和 “堆内存分配” 情况。其中,这里所分析的代码既包含Unity引擎的自身模块代码,也包含您自己书写的逻辑脚本。通过该部分,您将快速掌握项目中逻辑代码的运行性能瓶颈,从而有的放矢地进行改进和优化。 CPU占用时间 函数汇总 该项主要显示项目运行过程中具有较高CPU占用的函数列表,包括函数的 “总CPU耗时”、“最大单次CPU占
有人能解释一下如何在RxJava中通过平面图运算符传递完整信号吗? 如果flatMap操作符被注释,我可以得到从1到10的数字列表,这意味着toList将收到onComplete信号。但当我想在flatMap中进一步处理数据时,它会消耗一个完整的信号,而我无法得到任何结果。如何通过flatMap操作符传递onComplete信号? 我有以下简单的程序:
问题内容: 使用这些JPA属性 Ehcache对于同一查询效率不高, 问题与QueryCache类的namedParameters.hashCode()函数有关,它为同一查询生成了不同的HashCode! 与班级有关 它将为同一Array对象[01,1]生成一个不同的(新)hachCode! 对于数组,此hashCode方法应该是递归的 问题答案: 递归版本完全正常 类org.hibernate.
本文向大家介绍JavaScript数组去重的几种方法效率测试,包括了JavaScript数组去重的几种方法效率测试的使用技巧和注意事项,需要的朋友参考一下 以下是我针对网上三种高效率方法总结与效率测试,如果大家有更好的意见或建议也可以提出,大家共勉学习。 数组去重法1: 数组去重法2: 数组去重法3: 效率测试方法: 效率测试结果: 总结 以上就是关于JavaScript几种数组去重的方法效率测试