在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Go语言中写文件有多种方式,这里进行如下几种方式的速度对比:
在VMWare下的Ubuntu 14.04下运行的结果表明:
测试代码如下: package main import ( "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 times for 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 times for 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 file file, 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, 1000 d := [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.719386ms time of way(1)=31.428677ms time of way(2)=17.930829ms way 0 cost time is 2.2 times of way 2 way 1 cost time is 1.8 times of way 2
当n=5000时,测试结果如下(因为方式1报错,所以它的时间是错的) time of way(0)=170.003521ms 1 1021 open file failed. open benchmarkFile.txt: too many open files time of way(1)=32.388994ms time of way(2)=77.777936ms way 0 cost time is 2.2 times of way 2 way 1 cost time is 0.4 times of way 2
|
请发表评论