J'ai écrit visualiseur de débogage Delphi pour TDataSet pour afficher les valeurs de la ligne actuelle, source + capture d'écran: http://delphi.netcode.cz/text/tdataset-debug-visualizer.aspx. Bon travail, mais très lent. J'ai fait quelques optimisations (comment obtenir des noms de champs) mais toujours pour seulement 20 champs prend 10 secondes à montrer - très mauvais.Améliorer la vitesse de propre visualiseur de débogage pour Delphi 2010
Le problème principal semble être lent IOTAThread90.Evaluate utilisé par le code principal montré ci-dessous, cette procédure coûte la plupart du temps, ligne avec ** environ 80% de temps. FExpression est le nom de TDataset dans le code.
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;
Maintenant, je ne sais pas comment améliorer les performances.
Je ne suis pas familier avec ces composants de données, donc je ne sais pas comment améliorer de manière significative les performances.Cependant, votre copie pourrait être remplacée par une suppression, ce qui est probablement plus rapide. Et peut-être s <> '' pourrait être remplacé par longueur (s) = 0. S'il y a un gain de performance dans ce domaine, je ne sais pas. En général, cependant, je crois que la comparaison de chaînes utilisant = et <> est plus lente que les routines intelligentes SameText (s1, s2) et SameStr (s1, s2). –
@Andreas - ces micro-optimisations ne pouvaient pas contribuer beaucoup à un retard de 10 ** seconde ** –
@Barry Kelly: Je sais. C'est pourquoi j'ai écrit "Je ne sais pas comment améliorer significativement les performances". –