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表現中庸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM