阅读 115

LabVIEW程序设计之缓冲优化

    笔者以前看过一个范例,是关于LabVIEW中使用缓冲来优化程序的例子,但是在测试保存的文件夹中没有找到,一直耿耿于怀。今天在做程序初始化的东西时,居然翻到了这个例程,笔者感觉这个例程实在是太经典了,值得分享!

    关于内存管理,可以参考笔者以前总结的一篇文章-提升LabVIEW程序性能,优化内存管理

    关于程序设计不合理造成内存偏高,磁盘IO达到100%的案例,请参考笔者的文章-Mysql数据库磁盘IO达到100%的解决方法  。

    在实际的码代码的过程中,关于缓冲问题考虑甚少,在写入数据库(不需要实时返回插入数据)时是一行写一次,这其实没有必要,数据库频繁打开然后关闭的效率肯定没有一次打开写入多行数据高。下面的范例可以很好的解决这个问题,当然数据库可以使用其他缓冲方式,比如redis。但是在与文件的交互时,下面的范例是非常值得参考的。

    看来看一个这个范例。其使用了高效的内存管理方式,实现数据至文本文件的高速流盘。先看看整个程序框图,是用文件I/O和数组函数将数据写入制表符分隔的文本文件。运行后一秒钟结束,流盘速率(MB/sec)是4.83457,Data文件中有30万行数据,文件大小5000KB。

    文件读取/写入性能取决于写入磁盘的数据大小。优化的“块”大小取决于操作系统和磁盘块大小。例如,在Windows操作系统中,以65000字节的块读取或写入通常会优化性能。

    程序大体分为两种情况,缓冲未满和缓冲已满。

  1、 缓冲未满,使用字符串子集的替换字符串来将当前行添加至缓冲,而不是直接写入文件中。

  2、缓冲已满,将缓冲数据写入磁盘,并开始一个新的缓冲。同时使用元素同址操作结构来处理U8数组。在对数组、簇、变体数据或波形中的数据元素进行运算时,使用元素同址操作结构可避免LabVIEW编译器在内存中复制和保存数据值。该结构也可用于使被计算的数据类型保存在内存中指定的数据空间,改善内存和VI的效率。

    需要注意的是,在运用时根据程序的数据特点来指定缓冲的行数,预防分配的内存块太大,反而影响效率。

作者:刘小白DOER

原文链接:https://www.jianshu.com/p/05fdf967a7c6

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐