【问题标题】:Why SQLite 3.7.2 is 3 times faster than 3.7.9 on Step operations为什么 SQLite 3.7.2 在 Step 操作上比 3.7.9 快 3 倍
【发布时间】:2012-02-01 09:43:11
【问题描述】:

我已经从http://olex.openlogic.com/packages/sqlite/3.7.2 签出了 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 在最近的版本中变慢了吗?

【问题讨论】:

  • 500 毫秒仅迭代 25000 条记录?我很确定你做错了什么。在我的测试中(使用我的包装器),我可以使用 3.7.9 版本在不到 150 毫秒的时间内迭代 140000 条记录,这比使用以前的版本要快。如果没有更多代码,就不可能猜出问题出在哪里。

标签: performance sqlite delphi select


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2011-05-26
    • 2016-09-20
    相关资源
    最近更新 更多