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快,更比每次动态修改值快多了

  • 相关阅读:
    shell 遍历当前目录以及所有子目录下文件
    linux shell 字符串操作(长度,查找,替换)详解
    将自定义结构存入std::set 或者 std::map
    CentOS下搭建SVN服务器
    基于Debian的linux系统软件安装命令
    rm搭配grep删除符合条件的文件
    Centos系统环境
    怎么恢复用mysqldump备份数据和恢复数据
    mac 安装 node.js 的 canvas
    centos 6.5 安装 node.js 的 canvas模块
  • 原文地址:https://www.cnblogs.com/already/p/13708140.html
Copyright © 2011-2022 走看看