二种方法读取Protocol Buffer repeated字段的效率比较
2013-05-24 11:56
393 查看
定义测试用的Message:test.proto
从Msg里面读取SubMsgd有两种方法:
MutableTest.cc
结果
用mutable_sub_msg()明显快了不少。
message SubMsg { required uint32 n1 = 1; required uint32 n2 = 2; } message Msg { required uint32 n = 1; repeated SubMsg sub_msg = 2; }
[root@slayer xx]# protoc test.proto --cpp_out=./
从Msg里面读取SubMsgd有两种方法:
SubMsg sub_msg(int index); SubMsg* mutable_sub_msg(int index); //取出指针,可以修改Msg的内容
MutableTest.cc
#include "test.pb.h" #include "Poco/Timestamp.h" #include <iostream> #include <cstdlib> // === FUNCTION ====================================================================== // Name: main // Description: main function // ===================================================================================== int main ( int argc, char *argv[] ) { Msg msg; msg.set_n(0); for (int i = 0; i < 50000; ++i) { SubMsg* subMsg = msg.add_sub_msg(); subMsg->set_n1(i); subMsg->set_n2(i * 2); } int n1, n2; Poco::Timestamp ts; for (int i = 0; i < msg.sub_msg_size(); ++i) { SubMsg subMsg = msg.sub_msg(i); n1 = subMsg.n1(); n2 = subMsg.n2(); } std::cout << "msg.sub_msg(): " << ts.elapsed() << std::endl; ts.update(); for (int i = 0; i < msg.sub_msg_size(); ++i) { SubMsg* subMsg = msg.mutable_sub_msg(i); n1 = subMsg->n1(); n2 = subMsg->n2(); } std::cout << "msg.mutable_sub_msg(): " << ts.elapsed() << std::endl; return EXIT_SUCCESS; } // ---------- end of function main ----------
结果
[root@slayer xx]# g++ test.pb.cc MutableTest.cc -lPocoFoundation -lprotobuf [root@slayer xx]# ./a.out msg.sub_msg(): 6552 msg.mutable_sub_msg(): 1681 [root@slayer xx]#
用mutable_sub_msg()明显快了不少。
相关文章推荐
- 关于Oracle的exp和dblink转移数据效率比较以及DBLINK查询大字段方法
- Java从控制台读取数据,输入流System.in的几种方法效率比较
- readbuffer的readline方法读取文本文件bug
- Python合并两个字典的常用方法与效率比较
- 各种字符读取方法的比较(cin,getline等)
- 几种字符串反转方法效率比较
- 寻找最长递增子序列 的两方法效率比较
- Asp.Net使用LinQ读取Null值字段读不出数据的最简单调试方法!
- R语言读取Excel电子表格数据7种方法比较(结果惊呆本宝宝)
- 2种选择排序算法的效率比较(带测试main方法)
- 读取字段为空值的方法
- Oracle_查询当天记录 三种方法效率比较
- C++和Java的属性访问和方法调用 效率比较
- 图像透明拷贝--不同方法的效率比较
- Python用list或dict字段模式读取文件的方法
- 轉 C# 读取excel 二种方法
- linux shell脚本中读取文件内容的方法(含效率测试)
- mysql (优化)查询一条再筛选某个字段和直接查询该条的某个字段的效率比较
- 四种复制方法效率比较
- javascript 实现快排的两种方法 和sort()的比较,以及效率