gpt4 book ai didi

delphi - 提高 Delphi 2010 自己的调试可视化工具的速度

转载 作者:行者123 更新时间:2023-12-03 14:46:41 24 4
gpt4 key购买 nike

我为TDataSet编写了Delphi调试可视化工具来显示当前行的值,源+屏幕截图:http://delphi.netcode.cz/text/tdataset-debug-visualizer.aspx 。工作很好,但速度很慢。我做了一些优化(如何获取字段名称),但仍然只有 20 个字段需要 10 秒才能显示 - 非常糟糕。

主要问题是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;

现在我不知道如何提高性能。

最佳答案

Evaluate 需要做大量的工作。编译器需要对其进行编译,将符号解析为内存地址,而评估属性可能会导致调用函数,这需要调试器将参数复制到被调试者中,设置堆栈帧,调用要调用的函数,收集结果 - 这涉及暂停和恢复调试程序。

我只能建议尝试将更多工作打包到 Evaluate 调用中。我不能 100% 确定调试器和评估器(编译器的一部分)之间的交互如何适用于这些可视化工具,但批处理尽可能多的工作可能会有所帮助。在循环后调用 Evaluate 之前,尝试构建更复杂的表达式。您可能需要使用一些转义或定界约定来解压结果。例如,想象一下构建字段值列表并将它们作为逗号分隔字符串返回的表达式是什么样子 - 但您需要在值本身中转义逗号。

关于delphi - 提高 Delphi 2010 自己的调试可视化工具的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556146/

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