如何以及何时放弃在C#中使用数组?

Ken*_*eng 25 .net c# theory arrays

我总是被告知在数组中添加元素的方式如下:

创建数组+ 1element的空副本,然后将原始数组中的数据复制到其中,然后加载新元素的新数据

如果这是真的,那么由于内存和CPU利用率的原因,在需要大量元素活动的场景中使用数组是正确的,对吗?

如果是这种情况,你是否应该尽量避免在添加大量元素时尽可能多地使用数组?你应该使用iStringMap吗?如果是这样,如果您需要两个以上的维度并且需要添加大量元素添加,会发生什么.你刚刚受到性能打击还是应该使用其他东西?

Joe*_*orn 22

将泛型List<T>视为数组的替代.它们支持大多数数组所做的事情,包括根据需要分配初始存储大小.

  • 如果设计可重用或类似框架的组件,请考虑使用基类或接口,ICollection <T>或IEnumerable <T>.静态代码分析应该告诉你这个并链接到更好的信息(它是继承等). (2认同)

Ale*_*man 12

这实际上取决于"添加"的含义.

如果你的意思是:

T[] array;
int i;
T value;
...
if (i >= 0 && i <= array.Length)
    array[i] = value;
Run Code Online (Sandbox Code Playgroud)

然后,不,这不会创建一个新数组,实际上是改变.NET中任何类型的IList的最快方法.

但是,如果你使用的是ArrayList,List,Collection等,那么调用"Add"方法可能会创建一个新数组 - 但是他们对它很聪明,它们不只是调整1个元素,它们几何增长,所以如果你每隔一段时间添加很多值就必须分配一个新的数组.即便如此,如果您知道要添加多少元素,也可以使用"容量"属性强制它预先增长(list.Capacity += numberOfAddedElements)


Jon*_*upp 5

一般来说,我更喜欢避免使用数组。只需使用 List<T>。它在内部使用动态大小的数组,并且对于大多数用途来说足够快。如果您使用的是多维数组,请在必要时使用 List<List<List<T>>>。就内存而言,它并没有那么糟糕,并且添加项目要简单得多。

如果您在 0.1% 的使用率中需要极快的速度,请在尝试优化之前确保列表访问确实是问题所在。


归档时间:

查看次数:

21534 次

最近记录:

8 年,3 月 前