Delphi XE3 - TDataSet 的性能问题

标签 delphi delphi-xe3

使用 XE3 程序进行数据处理的时间比使用 XE2 编译的相同程序多出 10 倍。这是已知问题(可能主要指 TStringField),报告给 QC 111942 ,但尚未修复。有人能解决这个问题吗?

蒂亚·布兰科

最佳答案

XE5 中也是如此。再加上额外的流量,所有这些客户端服务器都需要每秒 >5 Mbit (!) 才能正常工作。我仅使用 TFDConnection 和 TFDQuery。特别是对于 MySQL,速度与 Delphi 组件和第三方驱动程序 (libmysql.dll) 相同。如果您没有 FireDAC,则可以将 TFDQuery 替换为 TSQLQuery。以下是如何填充字符串网格的过程:

procedure SelGrid(sql:ansiString;Q:TFDQuery;grid:TStringGrid);
var i: integer;
begin
  Q.Close;
  Q.SQL.Text:='';
  Q.Open(sql);
  grid.ColCount:=Q.FieldCount;
  grid.RowCount:=1;
  while not Q.Eof do begin
    for i := 0 to grid.ColCount-1 do grid.Cells[i,grid.RowCount-1]:=Q.Fields.Fields[i].AsString;
    grid.RowCount:=grid.RowCount+1;
    Q.Next;
  end;
  Q.Close;
  if grid.RowCount>1 then grid.RowCount:=grid.RowCount-1;
  grid.Row:=0;
  //AutoSizeGridColumns(grid,30,200);
end;

这是 VCL 字符串网格。当然,您可能会处理更新等问题,但不会再遇到性能问题。

关于Delphi XE3 - TDataSet 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596863/

相关文章:

delphi - 如何区分闪存盘?

delphi - 是否有类似StrToCurr的函数可以处理数千个分隔符?

delphi - dcef3 - Google map 欢迎始终显示

multithreading - 如何在多线程中调用递归函数

Delphi 如何使用 RTTI 获取属性的默认值

delphi - 宿主组件创建的自定义子组件未由设计器自动命名

sockets - 为什么TTcpClient丢弃SendStream()上的数据?

Delphi - 防止 Windows 从托盘应用程序关闭

delphi - 在 64 位 Delphi 中应该测试什么

arrays - 如何检查数组中是否存在字符串?