调整阵列性能?

时间:2012-03-07 22:38:02

标签: c# .net arrays performance resize

我想知道不断调整字节数组的大小会对性能产生重大影响。我正在向一个类添加数据,如果该类已经包含该数据类型,我需要将它添加到现有的字节数组中,这意味着我需要调整它的大小。问题是我有一些数据类型会批量添加,这意味着可能会出现多个数组调整大小。

这会对性能产生巨大影响吗?这个课程对性能非常重要。

如果确实如此,那么我可能需要进行设计改造。

2 个答案:

答案 0 :(得分:9)

如果需要调整大小,则应使用List<byte>代替。数组无法调整大小,因此您必须创建一个全新的数组,然后在添加其他内容之前将旧内容复制到新数组中(如果您所指的是Array.Resize,则这是{/ 3}}。

List<T>在内部使用数组,但会优化调整大小,因此您无需处理它。

基本上一旦内部数组已满并且添加了新内容,List<T>将使内部数组大小加倍,因此调整大小实际上很少发生 - 如果你直接调整数组大小,另一方面你要么必须采用类似的策略并保留“大小计数器”或在任何内容添加时调整大小的性能成本。

答案 1 :(得分:2)

是的,它影响了性能。调整大小数组不会简单地使原始数组更长或更短,它将创建一个新数组并在必要时将数据从旧数据复制到新数据。

正如评论中所建议的那样,使用动态容器如List或ArrayList,而后者不是类型保存但使用方便,我更喜欢。您可以查看:http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx