私は非常に頻繁に呼ばれる機能を持っています。この関数には、内部に2つのネストされたforループがあります。各forループは0から900まで繰り返されます。コードは次のようになります。
for (int j = 0; j < width; j++)
{
for (int k = 0; k < height; k++)
{
switch (Dim2[j * width + k])
{
case 0:
cwA = Dim0[j * width + ((k == (height - 1)) ? 0 : (k + 1))];
ccwA = Dim0[((j == (width - 1)) ? 0 : (j + 1)) * width + k];
oppA = Dim0[((j == (width - 1)) ? 0 : (j + 1)) * width + ((k == (height - 1)) ? 0 : (k + 1))];
cwB = Dim3[j * width + ((k == (height - 1)) ? 0 : (k + 1))];
ccwB = Dim3[((j == (width - 1)) ? 0 : (j + 1)) * width + k];
oppB = Dim3[((j == (width - 1)) ? 0 : (j + 1)) * width + ((k == (height - 1)) ? 0 : (k + 1))];
break;
case 1:
cwA = Dim0[((j == (width - 1)) ? 0 : (j + 1)) * width + k];
ccwA = Dim0[j * width + ((k == 0) ? (height - 1) : (k - 1))];
oppA = Dim0[((j == (width - 1)) ? 0 : (j + 1)) * width + ((k == 0) ? (height - 1) : (k - 1))];
cwB = Dim3[((j == (width - 1)) ? 0 : (j + 1)) * width + k];
ccwB = Dim3[j * width + ((k == 0) ? (height - 1) : (k - 1))];
oppB = Dim3[((j == (width - 1)) ? 0 : (j + 1)) * width + ((k == 0) ? (height - 1) : (k - 1))];
break;
case 2:
cwA = Dim0[((j == 0) ? (width - 1) : (j - 1)) * width + k];
ccwA = Dim0[j * width + ((k == (height - 1)) ? 0 : (k + 1))];
oppA = Dim0[((j == 0) ? (width - 1) : (j - 1)) * width + ((k == (height - 1)) ? 0 : (k + 1))];
cwB = Dim3[((j == 0) ? (width - 1) : (j - 1)) * width + k];
ccwB = Dim3[j * width + ((k == (height - 1)) ? 0 : (k + 1))];
oppB = Dim3[((j == 0) ? (width - 1) : (j - 1)) * width + ((k == (height - 1)) ? 0 : (k + 1))];
break;
case 3:
cwA = Dim0[j * width + ((k == 0) ? (height - 1) : (k - 1))];
ccwA = Dim0[((j == 0) ? (width - 1) : (j - 1)) * width + k];
oppA = Dim0[((j == 0) ? (width - 1) : (j - 1)) * width + ((k == 0) ? (height - 1) : (k - 1))];
cwB = Dim3[j * width + ((k == 0) ? (height - 1) : (k - 1))];
ccwB = Dim3[((j == 0) ? (width - 1) : (j - 1)) * width + k];
oppB = Dim3[((j == 0) ? (width - 1) : (j - 1)) * width + ((k == 0) ? (height - 1) : (k - 1))];
break;
}
woll = (((oppB + ccwB) + cwB) + Dim3[j * width + k]) > 0;
collision = ((Dim0[j * width + k] == oppA) && (cwA == ccwA)) && (Dim0[j * width + k] != cwA);
Dim6[j * width + k] = (short)(3 - Dim2[j * width + k]);
if (woll || collision)
{
Dim4[j * width + k] = Dim0[j * width + k];
}
else
{
Dim4[j * width + k] = _phase ? cwA : ccwA;
}
}
}
これらのforループの実行には約0.1秒かかりますが、これは遅すぎます。2次元配列を1次元配列に置き換えました。これにより、パフォーマンスが大幅に向上しました。コードの他のパフォーマンスの改善はありますか?C ++に移行した場合、より速く動作しますか?配列の操作に他の言語を使用する必要がありますか?あなたは何を提案しますか?
よろしくお願いします、
サム