完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
荣小菜补钙记第57期_TDMS多通道写入导致内存占用问题 同步更新于 WeChat:荣小菜在补钙 大家好,我是荣小菜,本期打算讲讲在使用TDMS写入vi来快速的向大量不同通道写入少量数据时,出现的内存不断被占用的问题。 1. 问题 当进行TDMS连续写入时发现,100MB数据,写入1个通道时不会导致内存占用,而将同样的100MB数据分成100000份来分别写入100000个不同通道时,随着不断写入, 会使内存占用不断增长,直到TDMS关闭,而TDMS刷新无法解决这一问题。 经过进一步极端实验,发现如果将100MB数据分成10M份来分别写入不同的10M个通道,写入1MB数据,内存就会占用将近46MB。 初步推测是多次调用TDMS写入导致,随后进一步实验表明,就算将100MB数据拆成2D数组,共10M行,再生成对应的1D通道名,按照这样的方式只调用1次TDMS写入,也无法解决内存问题。 下图中文字描述了Demo测试结果。 测试结果 此外,参考以下帖子关于设置通道属性,尝试修改NI_MinimunBufferSize、NI_DiskCacheSize等等其它属性,会显著影响写入速度,但依旧无法解决内存问题。 https://forums.ni.com/t5/NI-labview-CVI-%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86%E7%AD%89%E4%BA%A7%E5%93%81%E8%AE%A8%E8%AE%BA%E5%8C%BA/%E5%85%B3%E4%BA%8ETDMS%E6%96%87%E4%BB%B6%E9%97%AE%E9%A2%98%E6%B1%82%E5%8A%A9/m-p/657362?profile.language=en https://forums.ni.com/t5/NI-LabVIEW-CVI-%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86%E7%AD%89%E4%BA%A7%E5%93%81%E8%AE%A8%E8%AE%BA%E5%8C%BA/%E5%8C%97%E6%96%B9%E5%AE%A2%E6%A0%88%E4%B8%8A%E8%AF%B4-TDMS%E6%96%87%E4%BB%B6%E5%A4%9A%E5%B0%91%E4%B8%BA%E5%AE%9C-%E5%A4%A7%E4%BA%86%E4%BC%9A%E6%8A%A5%E9%94%99/td-p/1138003/page/2?profile.language=zh-CN 2. 总结 根据目前的测试来看,只能在使用TDMS写入时尽量设置合适的通道数据量,当向单通道写入数据大于10KB时,就基本上不会产生内存被大量占用的情况了。此外,若每次产生的数据较少,通过设置NI_MinimunBufferSize为10KB,可以保证当该通道数据量达到10KB后再写入,避免因数据量少导致的多次写入。 测试Demo已上传,感兴趣的同学可以看看,也期望各位大神能帮忙前来指教,进一步分析产生这种现象的原因和解决办法。 DemoLV2020:
Demo.vi
(40.29 KB, 下载次数: 6
)
DemoLV2016:
Demo2016.vi
(40.57 KB, 下载次数: 10
)
分享开源免费,共同学习进步^_^ 本帖被以下淘专辑推荐:
|
|
相关推荐
1个回答
|
|
谢谢大神向我展示了一个深究编程细节的过程。优化的使用结论,及逻辑清晰的验证过程都让我受益匪浅。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
用udl里的字符串信息在局域网内其他电脑连接sql数据库为什么为出现连接失败拒绝访问?
1675 浏览 2 评论
为什么同一个队列引用的全局变量,运行在两个子vi中发现队列数据丢失了
1274 浏览 0 评论
1486 浏览 0 评论
关于labview2024版本的lvanlys.dll出错的问题
2825 浏览 2 评论
1420 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 17:28 , Processed in 0.678778 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号