Golang 逐行读取大文件性能对比

前 言 

BUFIO 是什么?BUFIO 是用来驱动 I/O 列内的专用时钟网络,这个专用的时钟网络独立于全局时钟资源,适合采集源同步数据。BUFIO 只能由位于同一时钟区域的 Clock-Capable I/O驱动。一个时钟区域有4个 BURIO,其中的2个可以驱动相邻区域的 I/O 时钟网络。BUFIO 不能驱动逻辑资源(CLB、BRAM等),因为 I/O 时钟网络只存在于 I/O 列中。简单点就是:

  • bufio 包实现了带缓存的  I/O 操作
  • 它封装一个 io.Reader 或 io.Writer 对象
  • 使其具有缓存和一些文本读写功能

本文主要来对比一下 BUFIO 中的 ReadString 和 ReadLine 函数的性能。

注:测试代码忽略读取内容和错误处理

ReadString 函数

ReadString 代码:

ReadLine 函数

ReadLine 代码:

此函数主要解决单行字节数大于4096的情况

 

注: 测试文件 log 每行字节数均大于4096

性 能 对 比

以上两种方式分别读取10G/20G/30G文件的耗时如下:

读取10G文件耗时

读取20G文件耗时

读取30G文件耗时

 结 论

ReadLine 读取文件更快,原因是由于 ReadString 后端调用 ReadBytes,而 ReadBytes 多次使用 copy 方法造成大量耗时。

测试代码如下:

 

 

文章分类 未分类

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享