【问题标题】:Delphi XE3 - performance issue with TDataSetDelphi XE3 - TDataSet 的性能问题
【发布时间】:2013-03-13 21:00:09
【问题描述】:

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

蒂亚布兰科

【问题讨论】:

  • 恕我直言,您唯一的希望是降级或使用某些第三方内存表组件
  • @ComputerSaysNo - 问题不是 TClientDataset 特定的,我什至不使用 CDS

标签: delphi delphi-xe3


【解决方案1】:

在 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 字符串网格。当然,您可以考虑处理更新等问题,但您不会再遇到性能问题。

【讨论】:

  • QC 项目 111942 在 XE4 中被标记为已解决。你确定这是同一个问题吗? (WC 条目包括一个测试应用程序,用于测量此特定问题的性能)
  • 不,我不确定,但是使用 MySQL5 我遇到了性能问题,这在第 3 方连接中消失了。之后我开始尝试,发现使用 TFDConnection 和 TFDQuery 的性能与 libmysql.dll 相同,因此我使用 TFDConnection 和 TFDQuery 重新构建了应用程序。现在我不是在处理数据库,所以这只是一个旧记忆。
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 2014-06-29
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
相关资源
最近更新 更多