如何减少小阵列垃圾?

时间:2017-03-02 15:35:40

标签: c# arrays garbage-collection garbage

我试图减少某些算法生成的垃圾量,这些算法需要小型阵列才能高效工作。此外,在值类型中使用引用将减少内存局部性。将固定数组的内存内联到结构中可以提高缓存效率。

主要目标是保持实现的可读性,但不要通过分配数组来生成任何垃圾。

我提出了一个模式,该模式涉及使用结构模拟数组,该结构使用运行时性能来交换垃圾生成:

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吗?还有其他方法吗?

0 个答案:

没有答案