重要なメソッドのパフォーマンスを最大化するために、別の質問では、配列を修正するのではなく、ネイティブに割り当てて使用することが提案されました。
私はC#で作業しており、安全でないコードやP/invokeの使用経験はありません。Googleで関連する例は見つかりませんでした。また、 VirtualAllocに関するMSDNの記事も役に立ちませんでした。
これは何十億回も呼ばれる方法であり、あらゆるビットのパフォーマンスが望まれます。
public static readonly int[] HR = new int[32487834];
public unsafe int eval(int c1, int c2, int c3, int c4, int c5, int c6, int c7)
{
fixed (int* HR = Evaluator.HR)
{
int p = HR[53 + c1];
p = HR[p + c2];
p = HR[p + c3];
p = HR[p + c4];
p = HR[p + c5];
p = HR[p + c6];
return (HR[p + c7]);
}
}
興味がある場合は、TwoPlusTwo-EvaluatorのC#ポートであり、 123mbのルックアップテーブルを使用して、比較のためにランダムな7枚のカードポーカーハンドのランクを返します。私のマシンでは、平均してランダムな順序で約8000万回の評価/秒、連続した順序で5億回の評価/秒(c1 = 0、c2 = 1、ループはすべての変数を52までインクリメント)します。