我有一个使用 RTI DDS 的应用程序,使用dynamic data
来设置我的消息。
当我尝试在文件中发送300kb
的字符串时,我收到以下错误代码:
com.rti.dds.infrastructure.RETCODE_OUT_OF_RESOURCES
at com.rti.dds.util.Utilities.rethrow(Unknown Source) ~[nddsjava.jar:?]
at com.rti.dds.infrastructure.RETCODE_ERROR.check_return_codeI(Unknown Source) ~[nddsjava.jar:?]
at com.rti.dds.dynamicdata.DynamicData.set_string(Unknown Source) ~[nddsjava.jar:?]
我在他们的论坛上搜索并尝试了我能想到的所有更改到我的QOS策略文件以避免此错误,其中没有一个有效。
我认为现在解决这个问题的最佳方法是找到问题的根本原因,但是我已经遇到了障碍,无法弄清楚它是否与操作系统相关,内存泄漏或者是什么。
有没有人知道RTI DDS可能导致我这个问题?
答案 0 :(得分:1)
在您的评论中,您表示您已解决了问题。对其他人来说,了解它也可能仍然有用,特别是考虑到情况取决于您使用的Connext版本。因此我在这里回答。
DynamicData()对象的com.rti.dds.dynamicdata.DynamicData
构造函数具有类TypeCode
的名为type
的参数和类{{3}的名为property
的参数}}。后者配置新创建的对象的行为,特别是在内存分配和资源限制方面。
显然,您使用值com.rti.dds.dynamicdata.DYNAMIC_DATA_PROPERTY_DEFAULT
作为property
参数。对于旧版本的RTI产品(在5.2.0
之前),这意味着buffer_max_size
属性设置为65536字节的值。这对您的对象来说还不够,结果会出现RETCODE_OUT_OF_RESOURCES
异常。解决方案是传递属性对象的实例化,并将buffer_max_size
设置为足够大的值。
对于产品的当前版本,不再需要此版本。 buffer_max_size
的默认值现在为DynamicDataProperty_t
,表示缓冲区没有最大大小。