เปรียบเทียบไลบรารีการจัดลำดับข้อมูลต่างๆ สำหรับ C++
โปรเจ็กต์นี้ไม่มีการขึ้นต่อกันของไลบรารีการทำให้เป็นอนุกรมภายนอก ไลบรารีที่จำเป็นทั้งหมด (บูสต์ ประหยัด ฯลฯ) จะถูกดาวน์โหลดและสร้างโดยอัตโนมัติ แต่คุณต้องมีพื้นที่ว่างในดิสก์เพียงพอ (ประมาณ 2.3G) เพื่อสร้างส่วนประกอบทั้งหมด ในการสร้างโปรเจ็กต์นี้ คุณต้องมีคอมไพเลอร์ที่รองรับฟีเจอร์ C++14 โครงการได้รับการทดสอบด้วยคอมไพเลอร์ Clang และ GCC
git clone https://github.com/thekvs/cpp-serializers.git
cd cpp-serializers
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
$ ./benchmark -h
Benchmark various C++ serializers
Usage:
benchmark [OPTION...]
-h, --help show this help and exit
-l, --list show list of supported serializers
-c, --csv output in CSV format
-i, --iterations arg number of serialize/deserialize iterations
-s, --serializers arg comma separated list of serializers to benchmark
$ ./benchmark -i 100000
$ ./benchmark -i 100000 -s protobuf
$ ./benchmark -i 100000 -s protobuf,cereal
ผลลัพธ์ต่อไปนี้ได้รับการดำเนินการซีเรียลไลซ์-ดีซีเรียลไลซ์ 1000000 ครั้ง 50 ครั้ง จากนั้นจึงหาค่าเฉลี่ยผลลัพธ์บนคอมพิวเตอร์เดสก์ท็อปทั่วไปที่ใช้โปรเซสเซอร์ Intel Core i7 ที่ใช้ Ubuntu 16.04 เวอร์ชันที่แน่นอนของไลบรารีที่ใช้คือ:
ซีเรียลไลเซอร์ | ขนาดของวัตถุ | เฉลี่ย เวลาทั้งหมด |
---|---|---|
ประหยัดไบนารี | 17017 | 1190.22 |
ประหยัดขนาดกะทัดรัด | 13378 | 3474.32 |
โปรโตบุฟ | 16116 | 2312.78 |
เพิ่ม | 17470 | 1195.04 |
แพ็คข้อความ | 13402 | 2560.6 |
ซีเรียล | 17416 | 1,052.46 |
รว์ | 16384 | 4488.18 |
ใช่แล้ว | 17416 | 302.7 |
ใช่-กะทัดรัด | 13321 | 2063.34 |
สำหรับ capnproto และ flatbuffer เนื่องจากพวกมันจัดเก็บข้อมูลในรูปแบบ "ซีเรียลไลซ์" แล้ว และการทำให้ซีเรียลไลซ์โดยทั่วไปหมายถึงการได้รับตัวชี้ไปยังที่จัดเก็บข้อมูลภายใน เราจะวัดรอบ การสร้าง /ซีเรียลไลซ์/ดีซีเรียลไลซ์แบบเต็ม ในกรณีของไลบรารีอื่นๆ เราจะวัดวงจรซีเรียลไลซ์/ดีซีเรียลไลซ์ของโครงสร้างข้อมูลที่สร้างไว้แล้ว
ซีเรียลไลเซอร์ | ขนาดของวัตถุ | เฉลี่ย เวลาทั้งหมด |
---|---|---|
capnproto | 17768 | 400.98 |
บัฟเฟอร์แบบแบน | 17632 | 491.5 |
ขนาดวัดเป็นไบต์ เวลาวัดเป็นมิลลิวินาที