SQLite Library Footprint
SQLite库使用的代码空间取决于目标平台,编译器和优化设置。这些变量也会影响性能。
- 下面的图表显示了在x86_64的Ubuntu 16.04.3上测试的各种编译器和优化设置的截至2017年10月08日的SQLite的相对大小和性能。一般意见:
- Clang / LLVM编译器与GCC没有竞争力。Clang生成的二进制文件比GCC生成的二进制文件始终更大更慢。
- 配置文件引导优化(PGO)对SQLite没有帮助。PGO产生的二进制文件大约大1%,慢了大约0.33%。
- GCC-7生成的二进制文件比GCC-5更小更快,但差别不是很大。
- 使用GCC和-Os进行编译会生成一个略小于500KB大小的二进制文件。
- 开发人员需要做出的唯一重要设计决定是使用-Os(优化大小)还是-O6(优化速度)。-O6设置使得二进制文件的运行速度提高了2%或3%,但是它们的运行速度也增加了66%。这里的性能是通过使用cachegrind计算CPU周期来衡量的。分析中不考虑缓存未命中。如果考虑I-cache缺失,使用-O6构建可能不会比使用-Os构建更快。
- 考虑到以上所有情况,SQLite开发人员建议使用带有-Os优化设置的GCC-7编译SQLite。
Details
- 上面的测量使用SQLite版本5594a121bf132a98从2017-10-08开始。
- 唯一使用的SQLite编译时选项是-DSQLITE_ENABLE_MEMSYS5。可选的memsys5内存分配器用于性能测试,因为它提供的结果比Ubuntu上的库提供的malloc()/ free()更具可重复性。
- 性能可以提高,尺寸通过使-DSQLITE_THREADSAFE = 0,-DSQLITE_DEFAULT_MEMSTATUS = 0,-DSQLITE_DEFAULT_WAL_SYNCHRONOUS = 1,-DSQLITE_LIKE_DOESNT_MATCH_BLOBS,-DSQLITE_MAX_EXPR_DEPTH = 0,-DSQLITE_OMIT_DECLTYPE,-DSQLITE_OMIT_DEPRECATED,-DSQLITE_OMIT_PROGRESS_CALLBACK,-DSQLITE_OMIT_SHARED_CACHE,和-DSQLITE_USE_ALLOCA降低。所有这些选项共同导致性能提高约3.5%,尺寸缩小3.0%。
- 添加诸如-DSQLITE_ENABLE_JSON1,-DSQLITE_ENABLE_FTS5或-DSQLITE_ENABLE_RTREE之类的可选功能显然会增加库的大小。
- Performance was measured using the speedtest1.c utility program, which attempts to mimic a typical workload for SQLite. Options to the test runs are:
--shrink-memory --reprepare --stats --heap 10000000 64 --size 5
性能通过使用cachegrind运行speedtest1并观察“I refs”输出来测量。
SQLite在公共领域。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com