Rational® Rhapsody® 包含用來最佳化為埠連線產生之程式碼的選項。在很多實務練習中,這可改進應用程式效能。
註: 這個特性僅可供 C++ 程式碼使用。
當在模型中使用埠時,經常會發生以下情況:非行為埠的鏈結彼此相連,並且呼叫正從一端委派至另一端。這會造成執行時期效能較差,也會造成除錯應用程式更加困難。
若要避免此問題的發生,可以使用埠連線最佳化特性。當您使用這個產生程式碼選項時,產生的程式碼包含用來連接這種鏈結任一端埠的「捷徑」。
當決定是否使用埠的連線最佳化特性時,請考慮權衡利弊。最佳化的程式碼可提高效能,但同時也會耗用更多記憶體。
使用這個最佳化特性時,不會最佳化包含以下類型埠的連線程式碼:
- 快速埠
- 多重播送埠
- 具有只包含接收事件的必要介面的埠
- 具有至少包含一個事件的已提供介面(或衍生自至少具有一個事件的類別)的埠
下列內容可控制埠連線最佳化的使用:
- 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 內容值設為使用最佳化,則可以透過設定布林內容 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