我正在尝试以最快的方式将数组复制Struct1到(相同的二进制表示)数组中。Struct2我已经定义了一个联合来在和之间进行转换Struct1[],Struct2[]但是当我调用 Array.Copy 时,我得到一个异常,说数组是错误的类型。我该如何规避呢?Buffer.BlockCopy 只接受原始类型。这是代码:
[StructLayout(LayoutKind.Explicit)]
public struct Struct12Converter
{
[FieldOffset(0)]
public Struct1[] S1Array;
[FieldOffset(0)]
public Struct2[] S2Array;
}
public void ConversionTest()
{
var s1Array = new{new Struct1()}
var converter = new Struct12Converter{S1Array = s1Array};
var s2Array = new Struct2[1];
Array.Copy(converter.S2Array,0,s2Array,0,1) //throws here
//if you check with the debugger, it says converter.S2Array is a Struct1[],
//although the compiler lets you use it like a Struct2[]
//this has me baffled as well.
}
提供更多细节:我想试验一下,与一直使用相同的不可变结构相比,使用可变结构并更改其字段的值是否具有不同的性能特征。我认为它应该是相似的,但我认为它值得衡量。底层应用程序将是一个低延迟套接字库,我目前在其中使用ArraySegment<byte>基于 - 的套接字 API。碰巧在SocketAsyncEventArgsapi中,设置BufferList属性会触发一个数组副本,这是我的“实验”失败的地方(我有一个MutableArraySegment无法ArraySegment[]通过与以前相同的方法转换为的数组,因此我的比较毫无意义)。