【发布时间】:2011-11-12 01:39:36
【问题描述】:
我正在分析一些 C# 代码。下面的方法是最昂贵的方法之一。出于这个问题的目的,假设微优化是正确的做法。有没有办法提高这种方法的性能?
将输入参数从p 更改为ulong[] 会导致宏效率低下。
static ulong Fetch64(byte[] p, int ofs = 0)
{
unchecked
{
ulong result = p[0 + ofs] +
((ulong) p[1 + ofs] << 8) +
((ulong) p[2 + ofs] << 16) +
((ulong) p[3 + ofs] << 24) +
((ulong) p[4 + ofs] << 32) +
((ulong) p[5 + ofs] << 40) +
((ulong) p[6 + ofs] << 48) +
((ulong) p[7 + ofs] << 56);
return result;
}
}
【问题讨论】:
-
看起来像 BitConverter.ToInt64 - msdn.microsoft.com/en-us/library/… ?
-
读取并移动几个字节——这真的很贵吗?我敢肯定你说的很多,但如果编译器可能会出错,我会感到惊讶
-
@Alexei ToUInt64,但是是的。如果您的意思是使用它,请将其作为答案发布? (或者 Eric 甚至想优化 BitConverter?)
-
@Rup:BitConverter 比我的代码快很多。
标签: c# micro-optimization unchecked