Go语言中写文件有多种方式,这里进行如下几种方式的速度对比:

  1. 打开文件,写入内容,关闭文件。如此重复多次
  2. 打开文件,写入内容,defer 关闭文件。如此重复多次
  3. 打开文件,重复多次写入内容,defer 关闭文件

在VMWare下的Ubuntu 14.04下运行的结果表明:

  • 方式1速度最慢,但是慢的很稳定
  • 方式2比方式1略快,但是重复次数多了后会报错,应该是defer被压栈太多导致系统撑不了太多打开的文件
  • 方式3速度约是前两者的2倍,因为减少了很多打开关闭文件的操作

测试代码如下:

package mainimport ("fmt""os""time"
)func benchmarkFileWrite(filename string, n int, index int) (d time.Duration) {v := "ni shuo wo shi bu shi tai wu liao le a?"os.Remove(filename)t0 := time.Now()switch index {case 0: // open file and write, then close, repeat n timesfor i := 0; i < n; i++ {file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)if err != nil {fmt.Println(index, i, "open file failed.", err.Error())break}file.WriteString(v)file.WriteString("\n")file.Close()}case 1: // open file and write, defer close, repeat n timesfor i := 0; i < n; i++ {file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)if err != nil {fmt.Println(index, i, "open file failed.", err.Error())break}defer file.Close()file.WriteString(v)file.WriteString("\n")}case 2: // open file and write n times, then close filefile, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)if err != nil {fmt.Println(index, "open file failed.", err.Error())break}defer file.Close()for i := 0; i < n; i++ {file.WriteString(v)file.WriteString("\n")}}t1 := time.Now()d = t1.Sub(t0)fmt.Printf("time of way(%d)=%v\n", index, d)return d
}func main() {const k, n int = 3, 1000d := [k]time.Duration{}for i := 0; i < k; i++ {d[i] = benchmarkFileWrite("benchmarkFile.txt", n, i)}for i := 0; i < k-1; i++ {fmt.Printf("way %d cost time is %6.1f times of way %d\n", i, float32(d[i])/float32(d[k-1]), k-1)}
}

当n=1000时,测试结果如下

  time of way(0)=38.719386mstime of way(1)=31.428677mstime of way(2)=17.930829msway 0 cost time is    2.2 times of way 2way 1 cost time is    1.8 times of way 2

当n=5000时,测试结果如下(因为方式1报错,所以它的时间是错的)

  time of way(0)=170.003521ms1 1021 open file failed. open benchmarkFile.txt: too many open filestime of way(1)=32.388994mstime of way(2)=77.777936msway 0 cost time is    2.2 times of way 2way 1 cost time is    0.4 times of way 2

转载于:https://www.cnblogs.com/journeyonmyway/p/4320987.html

[笔记]Go语言写文件几种方式性能对比相关推荐

  1. python 打开文件4种方式

    python 打开文件4种方式 python 打开文件4种方式 [方式一]使用os.system()函数运行其他程序 [方式二]使用ShellExecute函数运行其他程序(用这种方法解决我的问题) ...

  2. Scala 语言输出的三种方式

    Scala 语言输出的三种方式 字符串通过+号连接(类似 java). printf 用法 (类似 C 语言)字符串通过 % 传值. 字符串通过$引用(类似 PHP).

  3. C++包含头文件几种方式

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105042381 包 ...

  4. linux上删除文件过慢,Linux上删除大量文件几种方式对比

    Linux上删除大量文件几种方式对比 linux上删除大量小文件删除测试:删除500000个小文件测试 生成文件: $ for i in $(seq 500000);do echo 'text' &g ...

  5. linux数据同步技术比较,linux下实现web数据同步的四种方式(性能比较)教程.docx

    linux下实现web数据同步的四种方式(性能比较)教程 实现web数据同步的四种方式=======================================1.nfs实现web数据共享2.rs ...

  6. android double转string_Java 数组转 List 的三种方式及对比

    来源:Java数组转List的三种方式及对比_五道口-CSDN博客 作者:大脑补丁 前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解 ...

  7. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  8. C语言写文件到txt里有屯字,C语言10 文件.ppt

    第十章 文件 C文件概述 文件类型指针 文件的打开与关闭 文件的读写 文件的定位 出错的检测 赂恰滔氢戳骏市蔫盒少郴害篆汤看拴掳驮泅戈呕压琐憨波褪队敛紫爸戏仅C语言10 文件C语言10 文件 10.1 ...

  9. java读文件几种方式_java中读取文件的方式有哪几种

    java中读取文件的方式有哪几种 发布时间:2020-06-19 13:36:48 来源:亿速云 阅读:135 作者:鸽子 读取文件有多种方式,基于传统的输入流方式或基于nio的Buffer缓冲对象和 ...

最新文章

  1. X@X.X域名转向的实现
  2. python的源代码文件的扩展名是-python源文件后缀是什么
  3. ADO.NET学习笔记-非链接类
  4. UA MATH571B 试验设计 2k析因设计理论上
  5. awk 内嵌正则 提取字符串_干货-Shell编程文本处理三剑客之-awk
  6. java中用jdom 如何创建xml文档/将数据写入XML中
  7. 模拟退火解决TSP问题
  8. mysql scrapy 重复数据_scrapy关于将数据保存进mysql数据库及问题解决(增删查改)
  9. python开发_xml.etree.ElementTree_XML文件操作
  10. JUC中的原子类总结
  11. python学习第七天--文件系统常用模块os,os.path,pickle
  12. Celery-一个会做异步任务,定时任务的芹菜
  13. JavaScript 学习-42.jQuery 提交表单 submit() 方法
  14. ICE入门之hello world
  15. 基于开路电压+安时积分法估算锂电池SOC(二)
  16. 给一个不多于5位的正整数,要求: ①求出它是几位数②分别输出每一位数③按逆序输出各位数字,例如原数为123,应输出321
  17. 金蝶K/3产品各版本引入/引出Excel文件时出现意外错误的提示,或未正确安装Excel的提示。微软补丁解决方案!(转)
  18. 导航栏调透明度HTML,导航栏透明度问题
  19. 电脑发到,电脑发送到手机的文件在哪里
  20. 夯实第一超市地位 京东超市成超10大品类超50家品牌线上最大渠道

热门文章

  1. 简析EDMX文件的构成 - CSDL、SSDL、MSL
  2. shell关闭指定进程
  3. JavaScript知识概要
  4. ScrollView常用(暂时用上了的)代理方法
  5. java 后台开发关键词解释
  6. MEncoder 使用实例
  7. latex中怎样使公式居中_LaTeX_多行公式对齐居中的同时选择性的加编号
  8. python网络攻击代码_Python-python网络编程写arp攻击代码
  9. Java笔记08-Map详解
  10. 解决:关于Git无法提交 index.lock File exists的问题