gpt4 book ai didi

Delphi:DBexpress 比 Firedac 快吗

转载 作者:行者123 更新时间:2023-12-04 17:17:55 26 4
gpt4 key购买 nike

我在我的网络 (Mariadb 10.3.24) 上运行 Mysql 服务器,并在相同的数据、相同的机器上使用 dbexpress 和 fireac 进行了性能测试,并且数据库上没有其他用户。我使用的是 Delphi 10.1,并且没有对连接或查询组件设置进行任何更改。
我的发现是(记录总数为 261.000):

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 和 fireac 相同):
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;

最佳答案

可以对您的代码执行多种操作来提高性能。
首先不要在循环期间更新 ListBox.Items,因为每次添加或删除项目时,屏幕都必须更新。这在循环运行时不需要。
二、停止使用FieldByName循环内。每次执行循环时,它都会强制搜索表的字段以查找该字段,这是不需要的。您可以在循环运行之前获取该字段一次,将其存储在一个变量中,然后通过循环中的该变量访问它。
这应该会大大提高您的性能。

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;

关于Delphi:DBexpress 比 Firedac 快吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68070236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com