ノード上で大量の処理を行う非常に大きなグラフがあるとします (ノードごとに数千万の操作など)。コア ルーチンは各ノードで同じですが、内部条件に基づいていくつかの追加操作があります。4 つのケース (0,0)、(1,0)、(0,1)、(1,1) を生成する 2 つの条件が存在する可能性があります。たとえば、(1,1) は、両方の条件が成立することを意味します。条件は、プログラム内で 1 回 (ノードごとに個別に 1 つ設定) 確立され、それ以降変更されることはありません。残念ながら、それらは実行時に完全に予測不可能な方法で決定されます (外部サーバーから HTTP 経由で受信したデータに基づいて)。
そのようなシナリオで最も速いのは何ですか? (私にはわからない最新のコンパイラの最適化を考慮に入れています)
- 単純に「IF」を使用する: if (条件 X) は追加の操作 X を実行します。
- 継承を使用して基本クラスから 4 つのクラスを派生させ (メソッド OPERATION を公開)、適切な操作を行い、何千万もの "if" を節約します。[しかし、これが本当に節約になるかどうかはわかりません。継承にもオーバーヘッドが必要です)
- 関数へのポインタを使用して、条件に基づいて関数を一度割り当てます。
自分でテストできるようになるまでには時間がかかります(まだそのような大きなデータはありません。これはより大きなプロジェクトに統合されるため、すべてのバージョンをテストするのは簡単ではありません)。
回答を読む: 私はおそらくそれを試してみる必要があることを知っています. しかし、すべてを除けば、これは一種の質問です。より速いのは次のとおりです。
数千万の IF ステートメントと通常の静的に既知の関数呼び出し VS 関数ポインターは VS 継承を呼び出しますが、これはこの場合、最良のアイデアではないと思います。今後の検査から除外することを考えています。そんな些細なことは気にしないでください(;_;)