次のC#コードを最適化しようとしています。このコードは、バイトをしきい値に設定する0x00
か0xFF
、しきい値に基づいて設定します。
for (int i = 0; i < veryLargeNumber; i++)
{
data[i] = (byte)(data[i] < threshold ? 0 : 255);
}
Visual Studioのパフォーマンスプロファイラーは、上記のコードがかなり高価であり、計算に8秒近くかかることを示しています。これは私の総処理費用の98%です。私は1000を少し下回るアイテムを処理しているので、合計で2時間以上になります。
問題は、分岐を引き起こすので、三元条件演算子に関係していると思います。CPUキャッシュに対応しているので、ある種の純粋な数学演算は大幅に高速になると思います。
これを最適化する方法はありますか?それが助けになるなら、私がしきい値を修正することは可能です。パフォーマンスが7%を超えると、合計処理時間が10分短縮されるため、勝利が増えると思います。