一种特殊的卸载模式可减少文件加载和使用 BimRv API 进行后续工作时的内存使用量。默认情况下,所有文件元素在从文件流中初始读取后都保留在内存中,但此模式会将它们序列化回特殊的存储空间,并在打开元素时从中提取。此功能可将内存使用量减少近一半,但可能会在文件加载期间导致严重的性能下降。
启用卸载模式还意味着对所有使用 API 打开的元素使用智能指针。通常建议使用智能指针,但对于卸载模式而言,这至关重要,因为如果使用原始指针处理,打开的元素会立即释放。
BimRv SDK 包含用于卸载模式的方法。例如,要检查卸载模式是否已启用,请调用 unloadEnabled() 方法。unloadCondition() 方法允许您创建文件卸载的条件。
要检查 unloadCondition() 函数是否可以缓存,请调用 unloadCoditionCanBeCached() 方法。
此外,OdRxSystemServices 扩展有一个选项可以将存储重定向到文件并指定数据同步速率。要检查是否可以重定向,请调用 useDisk() 方法,如果它返回 true,则使用 unloadFilePath() 方法卸载文件路径。要自定义索引速率,请使用 indexingRate() 方法。
默认情况下,卸载模式处于关闭状态。请注意,如果已使用 BimRv SDK 打开任何文件,则不应更改卸载模式选项。
可以在 BimRv/Extensions/ExServices/ 目录中找到一个示例扩展,其中包括名为 ExBimSystemServicesPE 的头文件和源文件,其中包含实现。此示例实现允许您在 OdaBimApp 中启用卸载模式。
COdaBimApp 类本身包含所有必要的 ODA 服务,但每个服务都可以由独立的实现表示。
class COdaBimApp : public CWinApp
, public OdRxObjectImpl<ExSystemServices>
, public OdRxObjectImpl<OdExBimHostAppServices>
, public OdRxObjectImpl<ExBimSystemServicesPE>
, public OdExBimHostAppProgressMeter
任何自定义实现都应在加载 OdBmLoaderModuleName 模块之后但在打开文件之前注册为 OdRxSystemServices 协议扩展。
// Initialize Runtime Extension environment
odrxInitialize(this);
// Load ODA BimRv modules
::odrxDynamicLinker()->loadModule(OdBmBaseModuleName);
::odrxDynamicLinker()->loadModule(OdBmLoaderModuleName, false);
// Disable Unloading mode initially
setUnloadEnabled(false);
setUseDisk(false);
OdRxSystemServices::desc()->addX(OdBmSystemServicesPE::desc(), static_cast<OdBmSystemServicesPE*>(this));
在 OdaBimApp 中,选择“文件”>“卸载模式”以选择两个卸载选项:是否在使用后从内存中卸载对象,以及是否将临时数据缓存到磁盘。如果任一选项打开,则启用卸载模式。请注意,由于其实现,如果文件已打开,您无法更改任何卸载选项。
在我们的文档中了解更多信息。