• gob,protobuf,json在golang中的序列化效率对比


    先上代码:

    looptimes:=10000
    	u:=User{66,"nxin","beijing"}
    	gobbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	gobbeginint,_:=strconv.Atoi(gobbegintimestamp)
    	fmt.Println("gob序列化==============================",gobbeginint)
    	buf := new(bytes.Buffer)   //分配内存
    	enc := gob.NewEncoder(buf) //创建基于buf内存的编码器
    	for i:=0;i<looptimes;i++ {
    
    		err := enc.Encode(u)       //编码器对结构体编码
    		if err != nil {
    			log.Fatal(err)
    		}
    	}
    	gobendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	gobendint,_:=strconv.Atoi(gobendtimestamp)
    	fmt.Println("===================END===================",gobendint)
    
    	jsonbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	jsonbeginint,_:=strconv.Atoi(jsonbegintimestamp)
    	fmt.Println("json序列化==============================", jsonbeginint)
    	for j:=0;j<looptimes;j++ {
    		_, e := json.Marshal(u)
    		if e!=nil{
    			log.Fatal(e)
    		}
    	}
    	jsonendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	jsonendint,_:=strconv.Atoi(jsonendtimestamp)
    	fmt.Println("===================END===================",jsonendint)
    
    
    	protobufbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	protobufbeginint,_:=strconv.Atoi(protobufbegintimestamp)
    	fmt.Println("protobuf序列化==============================", protobufbeginint)
    	hw:=&model.Helloworld{10,"wang","beijing"}
    	for j:=0;j<looptimes;j++ {
    		_, e := proto.Marshal(hw)
    		if e!=nil{
    			log.Fatal(e)
    		}
    	}
    	protobufendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    	protobufendint,_:=strconv.Atoi(protobufendtimestamp)
    	fmt.Println("===================END===================",protobufendint)
    
    
    	fmt.Println("json:",jsonendint-jsonbeginint)
    	fmt.Println("gob:",gobendint-gobbeginint)
    	fmt.Println("protobuf:",protobufendint-protobufbeginint)

    尝试了100,1000,10000,100000次的序列化对比时间:

    总结:

    总体来说protobuf的效率最高,gob的效率比json的还要低。

    100次时三者相差不大。

    =====================================================================

    1000次时三者表现不稳地,测试出来的结果:

    以前一种出现的次数更多。

    =====================================================================

    10000次出现的结果,protobuf效率明显要高,但是json与gob差别不大:

    =====================================================================

    100000次出现的结果:

    protobuf还是明显优势,但是gob有点落后。

    综上所述:在数据量小的时候三者差不多,但是数据量大了以后protobuf会更好,但是gob显得力不从心,json表现中庸

  • 相关阅读:
    03-hibernate注解-关系映射级别注解-一对一
    02-hibernate注解-属性级别注解
    linux下使用vim替换文件中的^M换行符
    maven项目中找不到Maven Dependencies解决办法
    软件设计师教程(第5版)- 前言和目录
    wireshark抓包分析工具的使用
    Tcpdump抓包工具的使用
    如何使用maven优雅地管理项目版本号
    Linux系统盘扩容-物理机非虚拟机
    eclipse下安装windowbuilder(一定要看)
  • 原文地址:https://www.cnblogs.com/ExMan/p/13933322.html
Copyright © 2020-2023  润新知