Rational® Rhapsody® 包含用來最佳化為埠連線產生之程式碼的選項。在很多實務練習中,這可改進應用程式效能。
註: 這個特性僅可供 C++ 程式碼使用。
當在模型中使用埠時,經常會發生以下情況:非行為埠的鏈結彼此相連,並且呼叫正從一端委派至另一端。這會造成執行時期效能較差,也會造成除錯應用程式更加困難。
若要避免此問題的發生,可以使用埠連線最佳化特性。當您使用這個產生程式碼選項時,產生的程式碼用來在執行時期連接這種鏈結的任一端埠。
當決定是否使用埠的連線最佳化特性時,請考慮權衡利弊。最佳化的程式碼可提高效能,但同時也會在應用程式啟動和起始設定埠時,暫時耗用更多記憶體。
使用這個最佳化特性時,不會最佳化包含以下類型埠的連線程式碼:
- 快速埠
- 多重播送埠
- 具有只包含接收事件的必要介面的埠
- 具有至少包含一個事件的已提供介面(或衍生自至少具有一個事件的類別)的埠
下列內容可控制埠連線最佳化的使用:
- CPP_CG::Configuration::OptimizePortConnectors - 決定 Rational Rhapsody 是否應該產生最佳化所需的程式碼(全部或部分)
- CPP_CG::Port::IncludeInConnectorOptimization - 決定在使用最佳化時要併入其中的埠
控制產生埠連線最佳化程式碼
埠連線最佳化程式碼包括:
- 讓特性變成可能的基礎架構程式碼
- 用於實際啟用特性的 OM_OPTIMIZE_PORT_CONNECTORS 巨集呼叫。這個巨集會呼叫用來計算及設定每個埠目的地的最佳化演算法
OptimizePortConnectors 內容控制這個程式碼的產生,並提供下列可能的值:
ActivateInComponent 值適用於可執行檔。針對程式庫,這個值適用於當使用程式庫的元件不需要知道是否使用了埠連接器最佳化這種情況。
ActivateExternally 值應該用於必須最佳化跨元件連線這種情況。
它還適用於當埠連線也進行手動起始設定這種情況。
註: 如果元件中的埠之間沒有鏈結,則即使您選取
ActivateInComponent 內容值,產生的程式碼也與在使用
ActivateExternally 內容值時產生的程式碼相同。這表示產生了所需的基礎架構,但是產生的程式碼不包括對
OM_OPTIMIZE_PORT_CONNECTORS 巨集的呼叫。在這種情況下,僅當您包括對該巨集的專屬呼叫時,才能釋放埠起始設定期間使用的額外記憶體。
控制最佳化哪些埠連線
如果您將 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