TA的每日心情 | 擦汗 昨天 07:57 |
---|
签到天数: 3414 天 连续签到: 16 天 [LV.Master]2000FPS
|
发表于 2021-12-20 16:14:40
|
显示全部楼层
|阅读模式
来自:广东省东莞市 电信
注册登陆后可查看附件和大图,以及购买相关内容
您需要 登录 才可以下载或查看,没有账号?注册会员
x
释放LabVIEW程序内存解决LabVIEW内存溢出的好办法
最近遇到一个问题,使用DB Tools操作ACCESS数据库的时候,发现在查询大量数据的时候,程序内存暴增,然后每查询一次都会有所增加,但把查询相关的程序关闭了,只要不退出LV,内存就不释放。
这时我用的查询语句是:SELECT C1,C2,C3.. FROM Table where ...,根据查询条件,有时会一次返回上万条数据,当查询结果中包括30列,2万多条记录时,内存要增加300MB左右。
后来,搜索相关问题,得知可以通过查询数据分页的方式把一次查询分成多个子查询然后再拼接起来,强哥在一个帖子里回答说用LIMIT来限制每次返回的记录数,但ACCESS不支持这个指令,只能用繁琐的top语句来替代。
这时,我用的查询语句是:SELECT TOP 1000 C1,C2,C3... FROM Table where ...,根据返回记录数是否小于1000(假如设定每次返回1000条),来判定是否查询结束,内存问题有所改善,返回30列,2万多条记录时,内存增加100MB左右。
但仍然不能彻底解决问题。
偶然,我发现360安全卫士提供的任务管理器可以优化内存,占用几百兆内存的程序一优化就剩下几十兆或几兆了,他是怎么做到的呢?windows肯定提供了这个机制。
我就在网上搜啊搜啊搜,终于被我找到了,一个叫empty.exe的程序,调用这个程序可以清理程序的内存。
调用方法:empty {pid | task-name}
省心了,呵呵。
empty.rar
(9.64 KB, 下载次数: 23)
这边还有个仁兄更加简单:
提供一个dll。嵌入你的程序内,随时随地爱怎莫释放就怎莫释放!
调用方式:
void FreeMem(void);
简单吧,没有参数。有没有返回值,方便LV们使用!
FreeMem.rar
(18.65 KB, 下载次数: 35)
LV示例是2020SP1版的。实现很简单,找到freeMem.dll后,打开,选择唯一的函数freemem,就可以了,参数、类型都使用默认值即可。
|
|