我试图减少某些算法生成的垃圾量,这些算法需要小型阵列才能高效工作。此外,在值类型中使用引用将减少内存局部性。将固定数组的内存内联到结构中可以提高缓存效率。
主要目标是保持实现的可读性,但不要通过分配数组来生成任何垃圾。
我提出了一个模式,该模式涉及使用结构模拟数组,该结构使用运行时性能来交换垃圾生成:
ulong[] smallArray = new ulong[2]
变为
struct ulong2
{
ulong l0;
ulong l1;
public ulong this[ulong n]
{
get
{
return (n == 0) ? l0 : l1;
}
set
{
if (n == 0)
{
l0 = value;
}
else
{
l1 = value;
}
}
}
}
ulong2 smallArray = new ulong2();
你需要稍微重构算法以应对by-value语义而不是原始数组by-ref,但是否则,当你知道它是一个非常好的即插即用替代品数组的固定大小。
如何优化以保持线性阵列的O(1)读/写特征?可以优化without using unsafe code吗?还有其他方法吗?