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