一 · 比较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 的性能分析。的更多相关文章

  1. [Golang]字符串拼接方式的性能分析

    本文100%由本人(Haoxiang Ma)原创,如需转载请注明出处. 本文写于2019/02/16,基于Go 1.11.至于其他版本的Go SDK,如有出入请自行查阅其他资料. Overview 写 ...

  2. 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 ...

  3. 记一次docker问题定位(perf,iostat等性能分析)

    背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...

  4. golang slice 切片原理

    golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...

  5. golang slice 源码解读

    本文从源码角度学习 golang slice 的创建.扩容,深拷贝的实现. 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量. type s ...

  6. for-loop 与 json.Unmarshal 性能分析概要

    原文地址:for-loop 与 json.Unmarshal 性能分析概要 前言 在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的 ...

  7. 性能分析(7)- 未利用系统缓存导致 I/O 缓慢案例

    性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前提 前面有学到 Buffer 和 Cache 的 ...

  8. 如何进行python性能分析?

    在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...

  9. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

随机推荐

  1. linux下tar的使用方法

    1.仅打包 tar -cvf hello.tar hello (输出文件大小为10240) 2.打包后压缩成gzip压缩格式 tar -czvf hello.tar.gz hello (输出文件大小为 ...

  2. java中使用Ehcache缓存数据

    知识点:在java项目中,使用ehcache缓存数据 参考博客:http://www.cnblogs.com/jingmoxukong/p/5975994.html ()概述 Ehcache是一个纯J ...

  3. SSH 登录时出现如下错误:Host key verification failed

       注意:本文相关 Linux 配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 使用 SS ...

  4. MySQL-性能优化-优化设计和设计原则

    MySQL性能优化目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效 ...

  5. 解决 ORA-28001: the password has expired 问题

    1.首先需要使用dba登录. 2.运行SQLPlus命令行工具, 输入: connect as sysdba; 3.输入dba的用户名和密码后进行 4.ALTER USER 用户名 IDENTIFIE ...

  6. HttpGet/HttpPost请求方法

    /// <summary> /// HttpGet请求 /// </summary> /// <param name="url">HttpGet ...

  7. MySQL 乐观锁 悲观锁 共享锁 排他锁

    乐观锁 乐观锁是逻辑概念上的锁,不是数据库自带的,需要我们自己去实现.乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁 ...

  8. centos双机热备份

    centos双机热备份 本机没有用到F5硬件,用到的是radware. 现在有2台服务器:192.168.2.66, 192.168.2.67 有一个公网ip:xxx.xxx.xx.203 将67上冷 ...

  9. 1-27 awk 基本使用

    大纲: 色彩: awk基本使用 ##################################################### 一.色彩:shell中,设置输出文本色彩(前景色,背景色) ...

  10. CodeForces 297D Color the Carpet (脑补题)

    题意 一个h*w的矩阵上面涂k种颜色,并且每行相邻格子.每列相邻格子都有=或者!=的约束.要求构造一种涂色方案使得至少有3/4的条件满足. 思路 脑补神题--自己肯定想不出来T_T-- 官方题解: 2 ...