首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi: DBexpress比Firedac快吗?

Delphi: DBexpress比Firedac快吗?
EN

Stack Overflow用户
提问于 2021-06-21 23:00:06
回答 1查看 239关注 0票数 3

我在我的网络(Mariadb 10.3.24)上运行Mysql服务器,并在相同的数据、相同的机器上使用dbexpress和firedac进行了性能测试,没有其他用户访问数据库。我使用的是Delphi10.1,并且没有对连接或查询组件的设置进行任何更改。

我的发现是(记录总数为261.000):

代码语言:javascript
复制
Reading 100.000 records without a "where-clause"
Firedac : 184 sec
DBexpress: 93 sec

Reading 100.000 records with a where clause (indexed)
Firedac: 160 sec
DBexpress: 86 sec

我所有的程序都是用Firedac编写的,有没有一种简单的方法来加速Firedac,或者我需要切换到dbexpress才能获得不错的性能?

我的测试(与dxexpress和firedac相同):

代码语言:javascript
复制
var start, slut : tdatetime;
    n : integer;
begin
  start := now;
  listbox1.Items.Clear;
  sqlq.Close;
  sqlq.SQLConnection:=sqlcon;
  sqlq.SQL.Clear;
  sqlq.SQL.Add('select * from forsendelser where kundenummer="test" limit '+spinedit1.Text);
  sqlq.Open;

  while not sqlq.Eof do begin
    listbox1.Items.Add(sqlq.FieldByName('stregkode').AsString );
    sqlq.Next;
  end;

  sqlq.Close;

  n :=SecondsBetween(Now, start);
  edit2.Text:=n.ToString;
end;
EN

回答 1

Stack Overflow用户

发布于 2021-06-22 10:55:01

有几件事可以用你的代码来提高性能。

首先,在循环期间不更新ListBox.Items,因为每次添加或删除项时,屏幕都必须更新。当循环运行时,这是不需要的。

第二,停止在循环中使用FieldByName。它强制搜索表的字段,以便在每次执行循环时找到该字段,这是不必要的。您可以在循环运行之前获取字段,将其存储在变量中,并通过循环中的该变量访问它。

这应该会大大提高您的性能。

代码语言:javascript
复制
var 
  start: TDateTime;
  n: Integer;
  Fld: TField;
begin
  start := now;
  ListBox1.Items.BeginUpdate;
  try
    listbox1.Items.Clear;
    sqlq.Close;
    sqlq.SQLConnection := sqlcon;
    sqlq.SQL.Text := 'select * from forsendelser where kundenummer="test" limit ' + spinedit1.Text;
    sqlq.Open;

    Fld := sqlq.FieldByName('stregkode');
    while not sqlq.Eof do 
    begin
      listbox1.Items.Add(Fld.AsString);
      sqlq.Next;
    end;
    sqlq.Close;
  finally
    ListBox1.Items.EndUpdate;
  end;

  n :=SecondsBetween(Now, start);
  edit2.Text:=n.ToString;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68070236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档