Astuce pour aller 27 fois plus vite que RichEdit.Lines.Assign(St

Soyez le premier à donner votre avis sur cette source.

Vue 3 156 fois - Téléchargée 1 001 fois

Description

Bonjour et bonne année 2016

L'astuce pour aller 27 fois plus vite consiste à tranférer la StringList au RichEdit via un MemoryStream lorsque le RichEdit n'a pas besoin d'utiliser les objets éventuellement associés à la StrigList-source (ce qui est très souvent le cas) :

procedure RE_Assign(const SLSource: TStringList; var RichEd: TRichEdit);
var aStream: TMemoryStream;
begin
RichEd.Lines.Capacity := SLSource.Count;
aStream := TMemoryStream.Create;
SLSource.SaveToStream(aStream);
aStream.Position := 0;
RichEd.Lines.LoadFromStream(aStream);
aStream.Free;
end;

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Salut et Bonne Année !!


c'est pas mal ... bien vu

mais je pense qu'il y avait encore plus simple :
  ...
  for i := 1 to 10 do begin
    RichEdit1.Lines.BeginUpdate;
    RichEdit1.Clear;
    RichEdit1.Text := SLSource.Text;
    RichEdit1.Lines.EndUpdate;
  end;
  ...

RichEdit1.Assign Standard : mis 1m 24s 453 ms
AssignMaison(SLSource,RichEdit1) : mis 3s 594 ms
AssignMaisonCirec RichEdit1.Text := SLSource.Text : mis 3s 469 ms

@+ Cirec
>
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021

Bonjour Cirec et Bonne Année,

Bingo! c'est effectivement bien plus simple et même un peu plus rapide :

RichEdit1.Assign Standard : mis 35s 180 ms
RichEdit1.AddStrings Standard : mis 35s 250 ms
AssignMaison(SLSource,RichEdit1) : mis 1s 320 ms
AssignMaisonCirec (FileName,RichEdit1) : mis 1s 290 ms
facteur de gain de vitesse AssignMaisonCirec = 35250/1290 = 27,3
(avec Intel Core i7-2700K à 3,5 GHz)

J'ai l'impression que RichEdit1.Assign(TStringList) Standard et AddStrings() Standard sont des usines à gaz qui perdent leur temps à faire des trucs inutiles en particulier si la StringList ne contient aucun objet.
Et je parie que cette lourdeur héritée de Delphi 1 perdure dans les versions plus récentes telles que les XE...

Cordialement et à +.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.