C# 单声道';在多维数组中不必要地复制装箱

C# 单声道';在多维数组中不必要地复制装箱,c#,mono,C#,Mono,我注意到Array.Copy在多维数组上使用时会导致大量堆分配。具体来说,考虑如下: static void Test() { int size = 100; byte[,] source = new byte[size, size]; byte[,] target = new byte[size, size]; Copy(source, target); } static void Copy(byte[,] source, byte[,] target) {

我注意到Array.Copy在多维数组上使用时会导致大量堆分配。具体来说,考虑如下:

static void Test()
{
    int size = 100;
    byte[,] source = new byte[size, size];
    byte[,] target = new byte[size, size];
    Copy(source, target);
}

static void Copy(byte[,] source, byte[,] target)
{
    System.Array.Copy(source, target, source.Length);
}
复制方法产生332kb的垃圾

深入挖掘,这一切都来自一个方法GetValueImpl。我检查了mono源代码(我正在使用mono编译器),它似乎是Array.Copy首先尝试进行FastCopy(还没有找到它的实现),如果失败,它最终会执行

Object srcval = sourceArray.GetValueImpl (source_pos + i);
对于数组中的每个元素。字节数(332K)正好对应于两个数组中装箱每个元素所产生的数量

如果我将2d数组替换为长度为10000的1d数组,则不会发生这种情况:我的复制方法不会生成任何分配。我是遗漏了什么还是这是一个错误