C#中的快速memcpy

我想用这样的原型编写一个C#方法:

void memcpy(byte[] dst, int dstOffset, byte[] src, int srcOffset, int len); 

我有这个方法的2个选项:

1。

 void memcpy(byte[] dst, int dstOffset, byte[] src, int srcOffset, int len) { for (int i = 0; i < len; i++) { dst[dstOffset + i] = src[srcOffset + i]; } } 

2。

 void memcpy(byte[] dst, int dstOffset, byte[] src, int srcOffset, int len) { IntPtr intPtr = getIntPtr(dst, dstOffset); System.Runtime.InteropServices.Marshal.Copy(src, srcOffset, intPtr, len); } IntPtr getIntPtr(byte[] buffer, int offset) { IntPtr intPtr; unsafe { fixed (byte* p1 = buffer) { byte* p2 = p1 + offset; intPtr = (IntPtr)p2; } } return intPtr; } 

问题:

答:我猜选项2比选项1快,是不是?

B.还有另一种更快的方法吗?

非常感谢。

选项#2被破坏,因为您指向的对象不再固定后使用指针。 在fixed块内获得的指针只能在同一fixed块内使用。 看起来你应该使用Marshal.UnsafeAddrOfPinnedArrayElement (并且仅在fixed数组的fixed块内使用它)。

看看Buffer.BlockCopy