为了最大化关键方法的性能,在另一个问题中,有人建议我本地分配和使用数组的内存,而不是修复它。
我在 C# 中工作,没有使用不安全代码和使用 P/invoke 的经验。我在谷歌上没有找到任何相关的例子,关于 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 张扑克手牌的排名以进行比较。在我的机器上,我以随机顺序平均大约 80M 评估/秒,以连续顺序平均 500M 评估/秒(c1=0,c2=1,循环将每个变量增加到 52)。