Rational® Rhapsody® には、ポート接続用に生成されるコードを最適化するためのオプションがあります。多くのシナリオでは、これによりアプリケーションのパフォーマンスが改善される可能性があります。
注: このフィーチャーは、C++ コードでのみ使用できます。
ポートがモデルで使用される場合、一連の非振る舞いポートが互いに接続され、呼び出しが一方のエンドから他方のエンドに委譲されるような状態がよく生じます。この結果、実行時パフォーマンスが低下し、アプリケーションのデバッグが困難になります。
この種の問題を回避するために、ポート接続最適化フィーチャーを使用できます。このコード生成オプションを使用すると、生成されるコードにはこの種の連鎖の一方のエンドのポートを接続するための「ショートカット」が含まれます。
ポートの接続最適化フィーチャーを使用するかどうかを決定する際には、トレードオフが存在することを考慮する必要があります。最適化されたコードを使用すると、パフォーマンスは改善しますが、それとともに使用するメモリーが増えます。
この最適化フィーチャーを使用しても、以下のタイプのポートが含まれる接続の場合はコードは最適化されません。
- 高速ポート
- マルチキャスト・ポート
- イベント受信のみが含まれる要求インターフェースをもつポート
- 少なくとも 1 つのイベントが含まれる (または少なくとも 1 つのイベントを持つクラスから派生した) 提供インターフェースを持つポート
ポート接続最適化の使用は以下のプロパティーで制御されます。
- CPP_CG::Configuration::OptimizePortConnectors - Rational Rhapsody が最適化に必要なコード (全部または一部) を生成するかどうかを決定します。
- CPP_CG::Port::IncludeInConnectorOptimization - 使用されると、最適化に含まれるポートを決定します。
ポート接続最適化コードの生成の制御
ポート接続最適化コードは以下のものから構成されます。
- フィーチャーを使用可能にするためのインフラストラクチャー・コード
- 実際にフィーチャーを使用可能にするための OM_OPTIMIZE_PORT_CONNECTORS と呼ばれるマクロの呼び出し。このマクロは、各ポートの宛先を計算して設定する最適化アルゴリズムを呼び出します。
OptimizePortConnectors プロパティーは、このコードの生成を制御し、以下の可能な値を提供します。
- NoOptimization—最適化は使用されません - インフラストラクチャー・コードも、マクロの呼び出しも生成されません。
- ActivateInComponent—Rational Rhapsody は、インフラストラクチャー・コードとマクロ呼び出しの両方を生成します。実行可能コンポーネントの場合、マクロ呼び出しは main 関数内で生成されます。ライブラリーの場合、呼び出しは、コンポーネントを表わすクラスのコンストラクター内で生成されます。マクロの呼び出しは、すべての関係が初期化された後で行われます。この値を使用すると、最適化は、コンポーネント・レベルでポートに対して使用可能になります。つまり、コンポーネント内のリンクのみが最適化されます。
- ActivateExternally—必要なインフラストラクチャー・コードは生成されますが、Rational Rhapsody は OM_OPTIMIZE_PORT_CONNECTORS マクロの呼び出しを生成しません。最適化されたコンポーネントを使用するコンポーネントのコードまたはその他のユーザー提供コードにこのマクロの呼び出しを含めることは、ユーザーの責任です。
ActivateInComponent 値は、実行可能なコンポーネントの場合に適切です。ライブラリーの場合、ライブラリーを使用するコンポーネントがポート・コネクター最適化の使用の有無を知る必要がない状態で使用するのが適切です。
コンポーネント間接続の最適化が必要な状態では、ActivateExternally 値を使用する必要があります。
ポート接続も手動で初期化されるような場合にもこれは適切です。
注: コンポーネント内のポートの間のリンクがない場合、最適化コードはまったく必要ありません。ただし、OptimizePortConnectors プロパティーの値が NoOptimization 以外に設定されていると、必要なインフラストラクチャー・コードが生成され、結果的に使用メモリーが大幅に増えます。そこで、ポート間のリンクがないコンポーネントの場合、このプロパティーを NoOptimization に設定してください。
最適化されるポート接続の制御
最適化を使用するように OptimizePortConnectors プロパティーの値を設定した場合、boolean プロパティー CPP_CG::Port::IncludeInConnectorOptimization の値を設定して、最適化されるポート接続を制御できます。
一連のポートにこのプロパティーの値が False に設定されたポートが含まれる場合、そのポートは最適化に含まれませんが、連鎖内のそれ以外のポート接続に対しては最適化が使用されます。
ポート接続最適化コードのカスタマイズ
ポート接続最適化コード (使用されるマクロの名前や含まれるヘッダー・ファイルなど) をカスタマイズするには、以下のプロパティーを使用できます。
- CPP_CG::Framework::PortConnectorsOptimizationBaseClassPattern
- CPP_CG::Framework::PortConnectorsOptimizationImpIncludeFiles
- CPP_CG::Framework::PortConnectorsOptimizationOptimizationPattern
- CPP_CG::Framework::PortConnectorsOptimizationRegistrationPattern
- CPP_CG::Framework::PortConnectorsOptimizationSpecIncludeFiles