C#集合性能方面了解

许多结合类都提供了相同的功能,例如,SortedList类与SortedDictionary类的功能几乎完全相同。但是,其性能常常有很大的区别。一个集合使用内存少,另一个集合的元素检索速度快。在MSDN文档中,集合的方法常常有性能提示,给出了以大写O记号表示的操作时间:

O(I)

O(Log n)

O(n)

O(I)表示无论集合中有多少数据项,这个操作需要的时间都不变。例如,ArrayList类的Add()方法就具有O(I)行为。无论列表中有多少个元素,在列表末尾追加一个新元素的时间都相同。Count属性会给出元素的个数,所以很容易找到列表末尾。

O(n)表示对于集合执行一个操作需要的时间在最坏的情况时是N。如果需要重新给集合分配内存,ArrayList类的Add()方法就是一个O(n)操作。改变容量,需要复制列表,复制的时间随元素的增加而线性增加。

O(log n)表示操作需要的时间随集合中元素的增加而增加,但每个元素需要增加的时间不是线性的,而是呈对数曲线。在集合中执行插入操作时,SortedDictionary<TKey,TValue>集合类具有O(n)行为。这里SortedDirtionary<TKey,TValue>集合类要快的多,因为它在属性结构中插入元素的效率比列表高得多。

猜你喜欢

转载自blog.csdn.net/qq_31975127/article/details/85335099