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 --prefix=/usr/local/similarlib/
python版本的msgpack灰常好用,速度上比python內建的pickle和cpickle都要快一些,C++版本的使用比較麻煩,下面是本人學習時的一個demo,解析python-msgpack dump的一個複雜字典
- #include <msgpack.hpp>
- #include <fstream>
- #include <iostream>
- usingnamespace std;
- template <class T>
- void msgunpack(constchar* binary_file, T& t, char* buff, uint32_t max){
- msgpack::unpacked msg;
- ifstream tf_file(binary_file,ios::in|ios::binary|ios::ate);
- uint32_t size = tf_file.tellg();
- tf_file.seekg(0, ios::beg);
- tf_file.read(buff, size);
- tf_file.close();
- msgpack::unpack(&msg, buff, size);
- msg.get().convert(&t);
- }
- typedef map<uint32_t, uint32_t> WordsMap;
- typedef map<uint32_t, WordsMap> FieldsMap;
- typedef map<uint64_t, FieldsMap> DocsMap;
- int main(int argc, char** argv)
- {
- uint32_t MAX_BUFF = 1024*1024*100; //100MB
- char* BUFF = newchar[MAX_BUFF];
- DocsMap docsMap;
- msgpack::unpacked msg;
- msgunpack("/data/wikidoc/tf_dict_for_nodes/1-1000", docsMap, BUFF, MAX_BUFF);
- // msg.get().convert(&docsMap);
- cout << docsMap.size() << endl;
- delete[] BUFF;
- }
下面是本人自己封裝的一個msgpack介面標頭檔案mymsgpack.h
- #ifndef MY_MSGPACK_H
- #ifndef MY_MSGPACK_H
- #define MY_MSGPACK_H
- #include <fstream>
- #include <msgpack.hpp>
- usingnamespace std;
- template <class T>
- void load_from_file(constchar* binary_file, T& t) {
- ifstream binaryFstream(binary_file,ios::in|ios::binary|ios::ate);
- uint32_t size = binaryFstream.tellg();
- char* buff = newchar[size];
- binaryFstream.seekg(0, ios::beg);
- binaryFstream.read(buff, size);
- binaryFstream.close();
- msgpack::unpacked msg;
- msgpack::unpack(&msg, buff, size);
- msg.get().convert(&t);
- delete[] buff;
- }
- template <class T>
- void load_from_str(constchar* binary_str, int len, T& t) {
- msgpack::unpacked msg;
- msgpack::unpack(&msg, binary_str, len);
- msg.get().convert(&t);
- }
- template <class T>
- void dump_to_file(T& t, constchar* dump_file) {
- msgpack::sbuffer sbuf;
- msgpack::pack(sbuf, t);
-
相關推薦
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求多元線性迴歸以及GPU和CPU計算效能對比
上一篇部落格《梯度下降法求多元線性迴歸及Java實現》簡單了介紹了梯度下降法,並用Java實現了一個梯度下降法求迴歸的例子。本篇部落格,嘗試用dl4j的張量運算庫nd4j來實現梯度下降法求多元線性迴歸,並比較GPU和CPU計算的效能差異。 一、ND4J簡介 &nb
001 c/s和b/s結構對比
C/S編輯 百科 當今世界科學技術飛速發展,尤其以通訊、計算機、網路為代表的網際網路技術更是日新月異,令人眼花繚亂,目不睱接。 由於計算機網際網路在政治、經濟、生活等各個領域的發展、運用以及網路的迅速普及和全社會對網路的依賴程度,計算機網路已經成為國家的經濟基礎和命脈,成為社會和經濟發展
Flutter和iOS原生效能對比測試
開篇 剛剛起步看了兩個月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變數大小的跳錶項的地址,程式接著跳到此地址執行,到此完成了分支的跳轉。 這就相當於以空間
PostgreSQL和MySQL的效能對比實驗
測試資料庫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/S和B/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中,TStringList和THashedStringList的效能對比
曾經看到很多人在嚷嚷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 程式設計中關於jni和jna兩種工具操作和效能對比測試
第一次發部落格有點緊張哈。 最近剛剛公司轉崗從底層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