程序运行占用大量内存求助

2019-07-18 04:41发布

程序刚打开的时候内存是170M左右,在采集过程中变化不大(1M或2M左右),采集完后从硬盘上把数据调出来处理,处理过程中有好几个波形图表要显示波形(显示的数据总和比一共采集到的多),内存一下就涨到230M左右,后面还有好几个数据处理步骤,运行完后内存达到320M,循环到第一步会清空历史数据,把所有显示控件全部清空,内存只会减少10M至20M,又继续连续运行多次,内存变化又不大了(只有打开程序第一次运行的时候内存变化特别大)

请问各位高手出现这种现象是什么原因,会不会运行八个小时不到就把内存占满了。

我用的是USB9234的采集卡,采集加速度,采样率是22000,采集14s,两个通道同时采集,采集边用tdms文件存到硬盘上,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
zeng
2019-07-18 13:12
如果你的程序没有内存泄漏,就不会长时间运行占内存太大。  内存泄漏与程序刚运行占内存大小无关。  理论上来说,内存大没有关系,只要不泄漏而且系统内存足够大。  如果有内存泄漏,原先占内存再小都有可能在长时间运行后崩溃。  也就是说,你的问题关键在于找出内存有没有泄露,至于你描述的现象(执行某个操作会增加内存),一般来说不是泄漏的来源,它只会在第一次运行时造成内存增加,后面的重复运行是不会再增加的。

内存泄露往往是使用了build array 或者concatenate string, 使得某个数组或字符串随着运行越来越大造成的。 当然还有可能是你调用的DLL甚至LabVIEW本身的函数产生的泄漏。 可以通过搜索build array 或者concatenate string排除一下自己程序的问题。

另外就是自己程序逻辑的问题了,很多情况下是不需要把所有数据都读进来的,可以分段处理,分段处理所需内存就会小很多。

一周热门 更多>