Rational® Rhapsody® 提供了一个选项来优化为端口连接生成的代码。在许多情况下,这可以提高应用程序的性能。
注: 此功能仅适用于 C++ 代码。
在模型中使用端口时,经常会出现相互连接的非行为端口的链(这些端口将调用从一端依次委派到另一端)。这将导致运行时性能欠佳,并且还使应用程序调试工作难以进行。
为了防止出现此类问题,您可以使用端口连接优化功能。使用此代码生成选项时,生成的代码将包含用于连接此类链任意一端的“快捷方式”。
在决定是否对端口使用连接优化功能时,请注意存在的不利影响。经过优化的代码将使性能提高,但也会使用更多的内存。
在使用此优化功能时,不会针对涉及下列端口类型的连接优化代码:
- 快速端口
- 多点广播端口
- 具有只包含事件接收的需求接口的端口
- 具有至少包含一个事件的供应接口(或者从至少具有一个事件的类派生的供应接口)的端口
对端口连接优化功能的使用由下列属性控制:
- CPP_CG::Configuration::OptimizePortConnectors - 确定 Rational Rhapsody 是否应该生成优化功能所需的代码以及是生成全部代码还是生成部分代码
- CPP_CG::Port::IncludeInConnectorOptimization - 确定使用优化功能时要优化的端口
控制端口连接优化代码的生成
端口连接优化代码由下列各项组成:
- 使此功能成为可能的基础结构代码
- 对 OM_OPTIMIZE_PORT_CONNECTORS 宏的调用,以便实际启用此功能。这个宏将调用用于计算并设置每个端口的目标的优化算法
OptimizePortConnectors 属性通过提供下列可能的值来控制此代码的生成:
- NoOptimization - 不进行优化,即,既不生成基础结构代码也不生成宏调用。
- ActivateInComponent - Rational Rhapsody 同时生成基础结构代码和宏调用。对于可执行组件,将在主函数中生成宏调用。对于库,将在表示该组件的类的构造函数中生成此调用。对这个宏进行的调用在所有关系初始化完成后进行。使用此值时,将在组件级别对端口启用优化,这表示只对组件中的链接进行优化。
- 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