Labview加载3D模型(.wrl)出现内存不足的解决方法
最近,由于项目的要求,需要做一个上位机,用于实时采集装备的状态信息。最终方案采用Labview数据流的方式构建应用程序。在加载wrl3D模型数据后,当程序运行到一定次数后(不到300次),程序报错显示所需内存不足。这个问题足足困扰了我好多天,经过了好多天的思考与琢磨终于解决了。
现分享给大家。
网上各种搜寻关于问题的解决方式。
现给大家分享一下:
以下所列的是在建立VI中需要考虑的一些问题。尽管它们并不代表了需要考虑的全部,但它们的确是进行优化的一些基本方法。
在任何情况下,将VI分解为子VI.当子VI不再被执行的时候,LabVIEW能够释放它的内存。
限制使用全局或者局部变量。使用全局和局部变量会造成LabVIEW为数据建立备份。
在需要时才在打开的前面板上显示大型数组和字符串。前面板的显示控件需要复制它们显示的数据。
属性节点会造成子VI的前面板滞留在内存中,这样会增加内存的使用。因此,如果子VI的前面板不被显示,不要在子VI中使用属性节点。
当在数组中使用相同的数据类型,并在传输数据进入子VI时使用强制小数点位置。当LabVIEW改变数据类型,输出需要一个新的缓存。
当设计流程图,要注意任何输入的大小与输出的大小不同的地方。举例,频繁的增加数组或者字符串的大小将造成数据的多次复制。这将造成LabVIEW使用的内存大大增加,并造成内存碎片。
上述方法的相关链接/public.nsf/allkb/D76766B20C63DCFA86256EA80036BE86
上述方法适用于所有内存不足问题。但在我这里不太有效。
我出现的问题,在网上看也有一些建议,是不要将加载的文件放在循环里,放在循环里面就会不停的创建产生大数组,占用内存,导致内存不足。但因为我需要对3D模型进行实时的变换(根据获取传感器姿态信息来利用3D模型展示出来),必须将3D模型放在循环里。
不放在循环里,会出现模型在最新的位置上一直旋转下去,有点头大了。
一些考虑
于是我就想怎样可以将我占用的内存,在每次占用后释放呢, 子VI的方式?
我的这个子VI需要一直在执行,貌似不太行(经过亲自测试果真不行),仍会出现同样的问题。每次读取模型的文件在显示完毕后,Clear内存?
有点意思了,貌似可行。
找一找Labview有没有释放缓存的控件,貌似没有,有点大失所望。与电脑虚拟缓存有关系?
充满希望的尝试了一下,增加了电脑的虚拟缓存。激动的打开了VI工程,过了一会,好像可以了,不会跳出内存不足了,杠一兴奋就弹出了同样的问题。艹。。。。
设置电脑虚拟缓存/itbk/software/dnwt/1611/8562760.html
绝望无助的时候,无意间注意到了一个控件。
这个,看了一下帮助
关闭打开的子VI,这能不能间接清理内存呢,试一下吧。呜呜呜,真是天无绝人之路啊,终于在最绝望的时候,解决了问题,高兴坏了。
现在把这个方法分享给大家,希望大家以后不要犯我这样的低级错误和问题。
上个图
最后,在这里致谢各位提供帮助的博主们。