清空数组的最有效方法是什么?

3
我在查看我刚开始编程时的一些旧代码时,发现了这个美丽的宝石:
int[] Answers = new int[4];

//Some amount of code later, inside a function
Answers[0] = Answers[1] = Answers[2] = Answers[3] = 0;

现在虽然它能工作,但因为有4个赋值运算符,看起来并不是很高效,所以我进行了一些研究,并找到了一些替代方案:

Array.Clear(Answers, 0, 4);
((IList)Answers).Clear();
Parallel.For(0, 4, index => Answers[index] = 0);

还有许多其他的方法,例如朋友提到了 Buffer.BlockCopyEnumerable.Repeat。其中哪一个更有效率,或者如果有其他更有效率的方法,是什么?


运行时效率如何?Answers = new int[4]呢? - undefined
@Carsten:我猜原始数组在内存中仍然会“漂浮”,直到被垃圾回收。清除它可以作为一种安全措施,例如当数组包含秘密或私钥时。 - undefined
3
“int Answers = new int[4];” 是不可能的。 - undefined
是的,我在想原始版本也可能会出现,这就是为什么我问的原因,否则我只会写Answers = {0,0,0,0}; - undefined
1
通常在性能问题上,要进行测量。但是在这种情况下,一个包含四个元素的数组可能根本不会有任何差别。 - undefined
显示剩余2条评论
1个回答

3
什么是清空数组最有效的方法?
效率取决于代码的上下文和最终目标以及数组中有多少项。获取内存位置可能比迭代数组以清除它更快。根据用于保存数据的内存类型,通常有优化的方法可以清除列表或数组的数据,这通常比手动清除要快。
尽管如此,人们很少直接清空数组,并通过创建具有可用数组的“干净”值的新数组来让数组被垃圾回收(在大部分情况下)。因此,通过遵守更好的编程规范,人们很少指定要创建和清除的数组大小以便重复使用。
重新使用和数组大小创建模式可能会导致索引和一般操作中的微妙和非微妙错误。因为在运行时创建数据列表(数组)并添加到其中(插入),并让语言处理数据的内存分配/释放是处理数据操作的更安全和更高效的方法。
因此,清空任何数组以进行重用是没有意义的。我们不再在基于8088的计算机上编程,其中内存和处理时间非常珍贵。对于现代计算机上大多数编程需求而言,试图优化少量代码(以及后来由原始编码者或新开发人员维护该代码)是愚蠢的,并且浪费了公司宝贵的开发时间。
对于开发组织而言,程序员的时间比用户最终可能不会注意到的几个周期的时间节省更为昂贵。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接