C#コードのプロファイリングを行っています。以下の方法は、最も高価なものの一つです。この質問の目的のために、マイクロ最適化を行うことが適切であると仮定します。この方法のパフォーマンスを向上させるアプローチはありますか?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のように見えます - http://msdn.microsoft.com/en-us/library/system.bitconverter.toint64.aspx? –
数バイトの読み取りとシフト - それは正直に高価ですか?私はあなたがそれをたくさん呼んでいると確信していますが、コンパイラがそれほど間違っていたら驚いています – Rup
@Alexei ToUInt64、でもそうです。それを代わりに使用することを意味するのであれば、答えとして投稿してください。 (または、エリックでもBitConverterを最適化したいのですか?) – Rup