我有一些处理大量复制数组的代码。基本上我的类是一个使用数组作为支持字段的集合,并且由于我不想冒任何人修改现有集合的风险,因此大多数操作都涉及在修改集合之前创建集合的副本,因此也复制支持数组。
我注意到复制有时会很慢,在可接受的范围内,但我担心当应用程序扩大并开始使用更多数据时这可能是一个问题。
一些性能分析测试表明,虽然几乎没有消耗 CPU 资源,但我的数组复制代码花费了大量时间阻塞。很少有争执,但很多时间都被阻塞了。由于测试应用程序是单线程的,我假设有一些 GC 争用魔法正在发生。我对 GC 在这些场景中的工作方式没有足够的信心,所以我在这里问。
我的问题 - 有没有办法创建新的阵列来减少 GC 的压力?或者有没有其他方法可以加快速度(为了测试和可读性而简化):
public MyCollection(MyCollection copyFrom)
{
_items = new KeyValuePair<T, double>[copyFrom._items.Length]; //this line is reported to have a lot of contention time
Array.Copy(copyFrom._items, _items, copyFrom._items.Length);
_numItems = copyFrom._numItems;
}