我已经从 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/