zoukankan      html  css  js  c++  java
  • 【原】golang slice组成的几种方式性能对比

    背景是群里小伙伴写go项目代码,用orm 插入sql,第一步分三条sql、三个slice 插入,建议他一条sql 插入,他找到了批量插入。

    但是批量插入需要组成一个切片slice,然后对于这个slice,一个元素不同,其他元素相同,他在想最优雅的解决办法。别人指导了一下 使用指针new 时,

    偶尔间我测了下性能,发现差异很多。直接上代码

    type User struct {
    	ID    int
    	Name  string
    	Title string
    }
    
    
    func (n *User) New(name string) User {
    	n.Name = name
    	return *n
    }
    

      

    package main
    
    import (
    	"testing"
    )
    
    //go test -bench=. -benchmem -run=none
    func BenchmarkUser_NewBuild(b *testing.B) {
    	b.ResetTimer()
    	for i := 0; i < b.N; i++ {
    		user := User{Title: "hee"}
    		_ = []User{user.New("2"), user.New("2"), user.New("2")}
    		//fmt.Println(users)
    	}
    }
    
    func BenchmarkUser_Build(b *testing.B) {
    	b.ResetTimer()
    	for i := 0; i < b.N; i++ {
    		users := make([]User, 3)
    		for i := 0; i < 3; i++ {
    			users[i].Name = "2"
    			users[i].Title = "hee"
    		}
    		//fmt.Println(users)
    	}
    }
    
    func BenchmarkUser_New(b *testing.B) {
    	b.ResetTimer()
    	for i := 0; i < b.N; i++ {
    		_ = []User{{Name: "hee", Title: "2"}, {Name: "hee", Title: "2"}, {Name: "hee", Title: "2"}}
    	}
    }
    

      

    deMacBook-Pro:orm cgy$ go test -bench=. -benchmem -run=none
    goos: darwin
    goarch: amd64
    pkg: go-test/orm
    BenchmarkUser_NewBuild-4        336196467                3.50 ns/op            0 B/op          0 allocs/op
    BenchmarkUser_Build-4           610977325                2.00 ns/op            0 B/op          0 allocs/op
    BenchmarkUser_New-4             1000000000               0.339 ns/op           0 B/op          0 allocs/op
    PASS
    ok      go-test/orm     3.350s
    

      可见,直接给定值比设定len快,更比每次动态修改值快多了

  • 相关阅读:
    PID控制心得 2013/2/11
    在LaTeX文档中插入图片的几种常用的方法
    学习总结 2013/2/11
    eclipse 中引用其他项目及项目打包
    随笔2013/2/13
    随笔2013/2/19
    【转载】Latex对中文的支持 模版
    Latex 第二个程序
    Fences 桌面图标整理收纳箱
    消除“星期一综合症” 大前研一的周末时间分配术
  • 原文地址:https://www.cnblogs.com/already/p/13708140.html
Copyright © 2011-2022 走看看