performance - 为什么 SQLite 3.7.2 在 Step 操作上比 3.7.9 快 3 倍

标签 performance sqlite delphi select

我已经从 http://olex.openlogic.com/packages/sqlite/3.7.2 checkout 了 3.7.2 SQLite
我还从 http://www.sqlite.org/sqlite-amalgamation-3070900.zip 获取了最新的 3.7.9

使用相同的 Borland C++ Compiler 5.5.1 设置编译两者

@echo off

set PATH=C:\Borland\Bcc55\Bin;%PATH%

rem Compilation Options
rem http://www.sqlite.org/compile.html#omitfeatures

set extra=%extra% -DSQLITE_DEFAULT_MEMSTATUS=0
set extra=%extra% -DSQLITE_TEMP_STORE=2

set extra=%extra% -DSQLITE_ENABLE_RTREE=1
set extra=%extra% -DSQLITE_ENABLE_COLUMN_METADATA=0
set extra=%extra% -DSQLITE_OMIT_DEPRECATED=1
set extra=%extra% -DSQLITE_OMIT_COMPILEOPTION_DIAGS=1
set extra=%extra% -DSQLITE_OMIT_PROGRESS_CALLBACK=1
set extra=%extra% -DSQLITE_OMIT_UTF16
set extra=%extra% -DSQLITE_OMIT_LOAD_EXTENSION=1
set extra=%extra% -DSQLITE_OMIT_EXPLAIN

@echo on

bcc32.exe -6 -O2 -c -d -u- -w- %extra% sqlite3.c
pause

使用 3.7.2,我需要 500 毫秒来执行 25 000 步操作,而 3.7.9 需要更多时间。

SQL语句很简单
select * from Cards

其中 Cards 是一个包含 16 个文本和 4 个整数列的表

SQLite 在最近的版本中变慢了吗?

最佳答案

AFAIK 这些版本之间在实现速度方面没有太大区别。最新的 3.7.9 更快。

我认为您在两个实现中没有使用相同的内存管理器。我猜您的 malloc/free 外部引用不是通过相同的方法实现的:您的 3.7.2 可能使用的是 Delphi FastMM4,而 3.7.9 可能使用的是默认的 Windows 或 MSCRT 堆。

关于performance - 为什么 SQLite 3.7.2 在 Step 操作上比 3.7.9 快 3 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8710781/

相关文章:

android - 查看 SQLite 数据库内容

delphi - catch 启动应用程序

delphi - Delphi 中的游戏开发

java - 在检查之前声明循环限制有什么好处?

Android sqlite/BLOB 性能问题

c++ - 在 C++ 中加速嵌套循环

php - 是否有等效于 sqlite3_limit 的 PHP?

sql - sqlite中的逻辑或

xml - 通过 Delphi XML 数据绑定(bind)向导使用 XML 枚举

c# - 如何使用 Windows 性能分析器查看 EventSource 创建的 ETW 事件?