golang slice 与list 的性能分析。
一 · 比较slice 与 list 遍历创建和添加元素速度。
package main import (
"time"
"fmt"
"container/list"
) func main() {
t := time.Now()
sli:=make([]int ,10)
for i := 0; i<1*100000*1000;i++ {
sli=append(sli, 1)
}
fmt.Println("slice 创建速度:" + time.Now().Sub(t).String()) t = time.Now()
l:=list.New()
for i := 0; i<1*100000*1000;i++ {
l.PushBack(1)
}
fmt.Println("list 创建速度: " + time.Now().Sub(t).String()) }
本机运行结果:
声明:测试结果为个人电脑的测试结果,仅供参考。
slice 创建速度:1.3029245s
list 创建速度: 9.7489181s
对于1亿条数据,slice 的创建和添加元素的速度约是list的7~8倍。
二 · 比较list和slice的遍历速度
package main import (
"time"
"fmt"
"container/list"
) func main() {
sli:=make([]int ,10)
for i := 0; i<1*100000*1000;i++ {
sli=append(sli, 1)
} l:=list.New()
for i := 0; i<1*100000*1000;i++ {
l.PushBack(1)
}
// 比较遍历
t := time.Now()
for _,_ = range sli {
//fmt.Printf("values[%d]=%d\n", i, item)
}
fmt.Println("遍历slice的速度:" + time.Now().Sub(t).String())
t = time.Now()
for e := l.Front(); e != nil; e = e.Next() {
//fmt.Println(e.Value)
}
fmt.Println("遍历list的速度:" + time.Now().Sub(t).String())
}
本机运行结果:
遍历slice的速度:32.0235ms
遍历list的速度:480.3413ms
对于1亿条数据来讲slice 遍历速度约是list的速度的15倍。
三 · 比较list和slice的插入速度
package main import (
"time"
"fmt"
"container/list"
) func main() { sli:=make([]int ,10)
for i := 0; i<1*100000*1000;i++ {
sli=append(sli, 1)
} l:=list.New()
for i := 0; i<1*100000*1000;i++ {
l.PushBack(1)
}
//比较插入
t := time.Now()
slif:=sli[:100000*500]
slib:=sli[100000*500:]
slif=append(slif, 10)
slif=append(slif, slib...)
fmt.Println("slice 的插入速度" + time.Now().Sub(t).String()) var em *list.Element
len:=l.Len()
var i int
for e := l.Front(); e != nil; e = e.Next() {
i++
if i ==len/2 {
em=e
break
}
}
//忽略掉找中间元素的速度。
t = time.Now()
ef:=l.PushBack(2)
l.MoveBefore(ef,em)
fmt.Println("list: " + time.Now().Sub(t).String())
}
本机运行结果:
slice 的插入速度79.054ms
list 的插入速度 : 0s
list的插入结果约是list 的”无穷”倍……
总结:对于很多数据来讲:频繁的插入和删除用list,频繁的遍历查询选slice。
golang slice 与list 的性能分析。的更多相关文章
- [Golang]字符串拼接方式的性能分析
本文100%由本人(Haoxiang Ma)原创,如需转载请注明出处. 本文写于2019/02/16,基于Go 1.11.至于其他版本的Go SDK,如有出入请自行查阅其他资料. Overview 写 ...
- golang slice 使用及源码分析
1.先做个小实验 func main(){ s1:=make([]int,0,10) s1=[]int{1,2,3} ss:=make([]int,0,10) ss = s1[1:] for i:=0 ...
- 记一次docker问题定位(perf,iostat等性能分析)
背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...
- golang slice 切片原理
golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...
- golang slice 源码解读
本文从源码角度学习 golang slice 的创建.扩容,深拷贝的实现. 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量. type s ...
- for-loop 与 json.Unmarshal 性能分析概要
原文地址:for-loop 与 json.Unmarshal 性能分析概要 前言 在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的 ...
- 性能分析(7)- 未利用系统缓存导致 I/O 缓慢案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前提 前面有学到 Buffer 和 Cache 的 ...
- 如何进行python性能分析?
在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
随机推荐
- python-运算、分支、深浅拷贝
算术表达式: + - * / 除法Python3中是默认向浮点数靠拢 //取整运算 结果的最小整数靠拢 向下 5 // 2 = 2(向下取整) %取余运算 5 % 2 = 1 **幂值运算 ...
- Nodejs V8引擎 fast property lookup
前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...
- java 之 find 命令
转自:https://blog.csdn.net/holyshit666/article/details/52296966 find命令是比较常用的命令,用来在特定目录下查找具有某种特征的文件. 一: ...
- 字符串与byte[]之间的转换
一. 编码 同一个字符在不同的编码下会被编成不同长度的编码,比如: ACSII,每个字符对应一个字节,实际上只使用了7位,从00h-7Fh.只能表达128个字符. GB2312,中文的一种编码,每个 ...
- IE 中的 button type默认值问题
今天遇到一个问题. 将项目页面的渲染模式从 IE7 改为 IE10 后(<meta http-equiv="X-UA-Compatible" content="IE ...
- python3安装pandas执行pip3 install pandas命令后卡住不动的问题及安装scipy、sklearn库的numpy.distutils.system_info.NotFoundError: no lapack/blas resources found问题
一直尝试在python3中安装pandas等一系列软件,但每次执行pip3 install pandas后就卡住不动了,一直停在那,开始以为是pip命令的版本不对,还执行过 python -m pip ...
- DJango简单的后台定义登录验证
第一步创建一个新的项目 APPLICATIONNAME : 表示创建子项目 第二步:找到主项目的url 进行 include 分发式url 简单的说,就是将app里边的url放在这里. 这里也可以找到 ...
- Java编码方式再学
一直以来对编码方式对了解不是很深入.建议读下这几篇博文 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 编码研究笔记 这几篇博文上回答了内心存在的一些问题,这些问题可能也是大家经常遇到的 ...
- nyoj20——有向无环图深搜模板
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- Log4j详细设置说明
1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径 ...