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

  • 相关阅读:
    Swift 正式开源, 包括 Swift 核心库和包管理器
    Swift 3 新特性
    iOS10 CoreData新特性
    iOS各个版本的新特性介绍
    iOS WKWebView详解
    Swift XML解析库
    ios辅助功能之voiceover实战
    iOS 内存管理机制和循环引用处理方法
    Swift 关键字汇总
    Swift 自动布局框架-SnapKit
  • 原文地址:https://www.cnblogs.com/already/p/13708140.html
Copyright © 2011-2022 走看看