1. 程式人生 > >msgpack[C++]使用筆記 和 msgpack/cPickle效能對比

msgpack[C++]使用筆記 和 msgpack/cPickle效能對比

轉載自:http://blog.csdn.net/xiarendeniao/article/details/6801338

python版本msgpack安裝:

wget http://pypi.python.org/packages/source/m/msgpack-python/msgpack-python-0.1.9.tar.gz

python2.x setup.py install --prefix=/usr/local/similarlib/

python版本的msgpack灰常好用,速度上比python內建的pickle和cpickle都要快一些,C++版本的使用比較麻煩,下面是本人學習時的一個demo,解析python-msgpack dump的一個複雜字典


  1. #include <msgpack.hpp>
  2. #include <fstream>
  3. #include <iostream>
  4. usingnamespace std;  
  5. template <class T>  
  6. void msgunpack(constchar* binary_file, T& t, char* buff, uint32_t max){  
  7.     msgpack::unpacked msg;  
  8.     ifstream tf_file(binary_file,ios::in|ios::binary|ios::ate);  
  9.     uint32_t size = tf_file.tellg();  
  10.     tf_file.seekg(0, ios::beg);  
  11.     tf_file.read(buff, size);  
  12.     tf_file.close();  
  13.     msgpack::unpack(&msg, buff, size);  
  14.     msg.get().convert(&t);  
  15. }  
  16. typedef map<uint32_t, uint32_t> WordsMap;  
  17. typedef map<uint32_t, WordsMap> FieldsMap;  
  18. typedef map<uint64_t, FieldsMap> DocsMap;  
  19. int main(int argc, char** argv)  
  20. {  
  21.     uint32_t MAX_BUFF = 1024*1024*100; //100MB
  22.     char* BUFF = newchar[MAX_BUFF];  
  23.     DocsMap docsMap;  
  24.     msgpack::unpacked msg;  
  25.     msgunpack("/data/wikidoc/tf_dict_for_nodes/1-1000", docsMap, BUFF, MAX_BUFF);  
  26.     //        msg.get().convert(&docsMap);
  27.     cout << docsMap.size() << endl;  
  28.         delete[] BUFF;  
  29. }  


下面是本人自己封裝的一個msgpack介面標頭檔案mymsgpack.h

  1.  #ifndef MY_MSGPACK_H
  2. #ifndef MY_MSGPACK_H
  3. #define MY_MSGPACK_H
  4. #include <fstream>
  5. #include <msgpack.hpp>
  6. usingnamespace std;  
  7. template <class T>  
  8. void load_from_file(constchar* binary_file, T& t) {  
  9.         ifstream binaryFstream(binary_file,ios::in|ios::binary|ios::ate);  
  10.         uint32_t size = binaryFstream.tellg();  
  11.         char* buff = newchar[size];  
  12.         binaryFstream.seekg(0, ios::beg);  
  13.         binaryFstream.read(buff, size);  
  14.         binaryFstream.close();  
  15.         msgpack::unpacked msg;  
  16.         msgpack::unpack(&msg, buff, size);  
  17.         msg.get().convert(&t);  
  18.         delete[] buff;  
  19. }  
  20. template <class T>  
  21. void load_from_str(constchar* binary_str, int len, T& t) {  
  22.         msgpack::unpacked msg;  
  23.         msgpack::unpack(&msg, binary_str, len);  
  24.         msg.get().convert(&t);  
  25. }  
  26. template <class T>  
  27. void dump_to_file(T& t, constchar* dump_file) {  
  28.     msgpack::sbuffer sbuf;  
  29.     msgpack::pack(sbuf, t);  
  30. 相關推薦

    msgpack[C++]使用筆記 msgpack/cPickle效能對比

    轉載自:http://blog.csdn.net/xiarendeniao/article/details/6801338 python版本msgpack安裝: wget http://pypi.python.org/packages/source/m/msgpack-python/msgpack-pyt

    msgpack[C++]使用筆記 msgpack/cPickle效能對比

    python版本msgpack安裝: wget http://pypi.python.org/packages/source/m/msgpack-python/msgpack-python-0.1.9.tar.gz python2.x setup.py install --

    C++拾趣——STL容器的插入、刪除、遍歷查詢操作效能對比(ubuntu g++)——遍歷查詢

    遍歷 從前往後 元素個數>15000 traversal_begin_16384_highest         表現最差的是unordered_multiset。其在遍歷到1000個左右的元素時發生較高的延時操作,然後又穩定下來。         除了

    ND4J求多元線性迴歸以及GPUCPU計算效能對比

    上一篇部落格《梯度下降法求多元線性迴歸及Java實現》簡單了介紹了梯度下降法,並用Java實現了一個梯度下降法求迴歸的例子。本篇部落格,嘗試用dl4j的張量運算庫nd4j來實現梯度下降法求多元線性迴歸,並比較GPU和CPU計算的效能差異。     一、ND4J簡介 &nb

    001 c/sb/s結構對比

    C/S編輯 百科   當今世界科學技術飛速發展,尤其以通訊、計算機、網路為代表的網際網路技術更是日新月異,令人眼花繚亂,目不睱接。 由於計算機網際網路在政治、經濟、生活等各個領域的發展、運用以及網路的迅速普及和全社會對網路的依賴程度,計算機網路已經成為國家的經濟基礎和命脈,成為社會和經濟發展

    FlutteriOS原生效能對比測試

    開篇 剛剛起步看了兩個月Flutter,感覺和之前那些跨平臺框架略有不同,我認為已經到跨平臺時代的3.0(隨便說說哈)。 現在Flutter是谷歌主推的一個東西,感覺還是有點期待。下面是一個Flutter的Demo和自己做的一個基本功能差不多的iOS原生Demo做一個性能對比。 正文 下文使用,從記憶體

    C++ 類結構體的對比

    我一開始只學習過C語言中的結構體,並且認為C++裡的結構體和C裡的是一樣的,在C++中也一直按照C的方式使用結構體。但我後來發現,C++中的結構體和類在語法上好像沒什麼兩樣,給我造成了很大困惑。究竟C++中的類和結構體有何異同?要解決這個問題,讓我們先從C中的結構體說起。 C語言中的結構體

    C# 中Switch、If 效能對比

    switch...case:會生成一份大小(表項數)為最大case常量+1的跳錶,程式首先判斷switch變數是否大於最大case 常量,若大於,則跳到default分支處理;否則取得索引號為switch變數大小的跳錶項的地址,程式接著跳到此地址執行,到此完成了分支的跳轉。 這就相當於以空間

    PostgreSQLMySQL的效能對比實驗

    測試資料庫schema: drop table if exists t1; drop table if exists t2; drop table if exists t3; create table t1(id int primary key, value1 int, v

    C/SB/S效能介紹及優缺點分析

    為了區別於傳統的C/S模式,才特意將其稱為B/S模式。認識到這些結構的特徵,對於系統的選型而言是很關鍵的。 一:系統的效能   在系統的效能方面,B/S佔有優勢的是其異地瀏覽和資訊採集的靈活性。任何時間、任何地點、任何系統,只要可以使用瀏覽器上網,就可以使用B/S系統的終端。   不過,採用B/S結構,客

    C標籤s標籤的對比,特別是裡面的if判斷條件的寫法

    struts2標籤有if…..else <s:if></if> <s:else></s:else> 如果要用c標籤來表示if…..else 的效果 <c:choose>

    【轉】誰說Delphi沒有雜湊?--Delphi中,TStringListTHashedStringList的效能對比

    曾經看到很多人在嚷嚷Delphi沒有雜湊表,這些人的動手意識姑且不論,卻還有很多人以此來證明Delphi比別的語言垃圾,實在是... 好,牢騷打住,轉接正題。 TStringList是我們常用的字串列表型別,用法就不在這裡贅述,但是,在資料其項數增多時,其搜尋(主要是na

    實際專案中,看 ECharts HighCharts 渲染效能對比,表面看衣裝,本質看內功!!!

         最近做專案,使用的是echarts顯示圖表資料,但是資料量比較多的時候,有卡頓的情況。後來同事拿echarts和HighCharts做了對比,僅供大家參考。同時感謝同事做的工作。 一、查詢1天的源資料,屬性1、屬性2、屬性3、屬性4  &

    C++有序map無序unordered_map效能測試對比

    概述 簡單對比map和unordered_map的效能。 map內部是紅黑樹,在插入元素時會自動排序,而無序容器unordered_map內部是散列表,通過雜湊而不是排序來快速操作元素,使得效率更高。當你不需要排序時選擇unordered_map的效率更高。

    java工作筆記:web 程式設計中關於jnijna兩種工具操作效能對比測試

           第一次發部落格有點緊張哈。        最近剛剛公司轉崗從底層C語言的編寫到做Java的web restful架構。其中需要呼叫底層C++程式碼庫。所以對於選擇哪種方法從Java呼叫C的程式碼做了簡單地學習和對比測試。在這裡把他們貼出了。希望能有大神出來指點

    C++筆記(6):標準模板庫STL:容器、叠代器算法

    strong 並且 pty 優先級隊列 決定 image left sig 樹結構 STL(Standard Template Library)是C++標準庫的一部分。STL的代碼從廣義上講分為三類:容器、叠代器和算法。 1.容器 2.叠代器 3.算法 ---------

    C++筆記(5):繼承多態代碼實現

    c++筆記 esp 變量 main style cnblogs radius 區分 fine Shape.h 1 #ifndef SHAPE_H 2 #define SHAPE_H 3 #include<string> 4 using std::str

    C++筆記(12):動態內存智能指針

    style round 運算 span tro 運算符 delet 庫函數 針對                           動態內存和智能指針 動態內存:   1.針對堆裏面存放的對象   2.使用new delete運算符   3.智能指針:shared_ptr

    C筆記A01 _tmain() main() 的區別,

    c++ 編譯器 tro ron 編譯速度 class 字符 nap har 最近開始用VS寫程序,創建了一個C++控制臺程序,發現和以前的裸機C還是有很大的區別 _tmain()是unicode版本的的main() _tmain這個符號多見於VC++創建的控制

    【學習筆記C# 構造析構

    成員 int 學習 pri [] func 釋放內存 ring 銷毀 構造方法 構造方法是一個特殊的方法,負責初始化對象 構造方法名必須和類名一致 構造方法沒有返回值,但可以有參數,能夠重載 構造方法可以不寫,系統會自動為類添加一個無參的默認構造 如果將構造方法設置為P