【发布时间】:2014-04-23 15:27:47
【问题描述】:
我有一个 C# 类,其中包含一个 int[] 数组(以及几个其他字段,但数组是主要内容)。代码通常会创建此类的副本,并且分析显示复制此数组的 Array.Copy() 调用需要大量时间。我该怎么做才能让它更快?
数组大小非常小且恒定:12 个元素。所以理想情况下,我想要一个 C 风格的数组:类本身内部的单个内存块(不是指针)。这在 C# 中可能吗? (如果需要,我可以使用不安全的代码。)
我已经试过了:
1) 使用 UIn64 和位移而不是数组。 (每个元素的值也非常小。)这确实加快了复制速度,但会减慢整个程序的速度。
2) 为每个数组元素使用单独的字段:int element0、int element1、int element2 等。同样,当我必须访问给定索引处的元素时,这总体上会变慢。
【问题讨论】:
-
为什么小数据集需要快速的数组拷贝?优化不是最好用在其他地方吗?
-
多一点上下文(可能还有代码)可能有助于解决这个问题。正如@mason 所说,很难相信复制 12 个元素是一个瓶颈,但我假设你经常这样做,也许是在一个循环中。所以你做这件事的背景可能会带来一些更好的答案。
-
是的,它被频繁调用,在一个循环中。
标签: c# arrays performance unsafe