【发布时间】:2013-04-04 11:41:53
【问题描述】:
我想用这样的原型编写一个 C# 方法:
void memcpy(byte[] dst, int dstOffset, byte[] src, int srcOffset, int len);
这个方法我有两个选择:
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;
}
问题:
A.我猜选项 2 比选项 1 快,对吗?
B.还有其他更快的方法吗?
非常感谢。
【问题讨论】:
-
@Jonathon:测试不太可能发现竞争条件(wrt 垃圾收集)。
-
另外,不要re-invent the wheel。
-
@Simon:这不是速度问题。这是一个正确性问题。
-
@BenVoigt “我猜选项 2 比选项 1 快。是吗?”。这是一个速度问题/问题..因此“自己进行基准测试”。
-
@Simon:所有优化问题主要是正确性问题,其次才是性能问题。如果不需要正确性,我会将您的整个程序替换为一个空文件,我向您保证会快得多。
标签: c# performance memcpy