Lou*_*der 10 .net c# vb.net performance memory-management
我正在逐步查看一个大的对象列表,以便对列表中的所述对象执行一些操作.
在迭代期间,我将根据特定条件从列表中删除一些对象.
完成所有操作后,我需要更新有关列表中对象数量的UI.(T列表).
题:
当我调用list.count时,.net是否实际遍历列表来计算它,还是将计数存储为属性/变量?
如果.net在列表中进行物理重新迭代,我也可以通过列表在我自己的迭代中保留一个计数器,并节省开销?
谢谢
Den*_*s_E 19
它只是保留一个内部int来跟踪项目数.所以没有迭代.文档说检索Count是一个O(1)操作:
http://msdn.microsoft.com/en-us/library/27b47ht3%28v=vs.110%29.aspx
你可以自己看看:
http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
List
实现为数组列表,它跟踪自己的大小,因此调用该.Count
属性不需要任何迭代.
如果调用LINQ .Count()
扩展方法,这将检查是否存在底层IEnumerable<>
实现ICollection
(a List<>
确实如此),并.Count
在可能的情况下使用该接口上的属性.所以这不会导致任何迭代发生.
顺便提一下,如果您在迭代它时尝试从列表中删除项目,则还会遇到其他问题.当你从迭代器下面删除元素时,迭代应该如何表现并不是很清楚,所以List<>
如果自创建枚举数以来修改了列表,s将完全避免这个问题.
归档时间: |
|
查看次数: |
1796 次 |
最近记录: |