我编写了一个Delphi调试可视化工具,用于显示TDataSet的当前行值,源码和屏幕截图可以在http://delphi.netcode.cz/text/tdataset-debug-visualizer.aspx中找到。虽然运行良好,但是非常慢。我已经优化过一些内容(如获取字段名称),但仍然需要10秒才能显示20个字段 - 这很糟糕。
主要问题似乎是主代码中使用的IOTAThread90.Evaluate速度缓慢,下面的代码中这个过程占用大部分时间,带有**的行约占80%的时间。FExpression是代码中TDataset的名称。
主要问题似乎是主代码中使用的IOTAThread90.Evaluate速度缓慢,下面的代码中这个过程占用大部分时间,带有**的行约占80%的时间。FExpression是代码中TDataset的名称。
procedure TDataSetViewerFrame.mFillData;
var
iCount: Integer;
I: Integer;
// sw: TStopwatch;
s: string;
begin
// sw := TStopwatch.StartNew;
iCount := StrToIntDef(Evaluate(FExpression+'.Fields.Count'), 0);
for I := 0 to iCount - 1 do
begin
s:= s + Format('%s.Fields[%d].FieldName+'',''+', [FExpression, I]);
// FFields.Add(Evaluate(Format('%s.Fields[%d].FieldName', [FExpression, I])));
FValues.Add(Evaluate(Format('%s.Fields[%d].Value', [FExpression, I]))); //**
end;
if s<> '' then
Delete(s, length(s)-4, 5);
s := Evaluate(s);
s:= Copy(s, 2, Length(s) -2);
FFields.CommaText := s;
{ sw.Stop;
s := sw.Elapsed;
Application.MessageBox(Pchar(s), '');}
end;
现在我不知道如何提高性能。