IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Lenteur de RichEdit.Lines.Assign(StringList)


Sujet :

Composants VCL Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut Lenteur de RichEdit.Lines.Assign(StringList)
    Bonjour,

    Quelqu'un pourrait-il m'expliquer pourquoi RichEdit.Lines.Assign(SLSource) est 27 fois plus lent que ma procedure AssignMaison(const SLSource: TStringList; var RichEd: TRichEdit) lorsque à partir d'un fichier de 1 Mo j'en extrais la StringList
    que j'assigne 10 fois de suite à un RichEdit avec le code ci-après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    var SLSource: TStringList;
     
    procedure TForm1.bChargerZolaClick(Sender: TObject);
    var FileName: string;
    begin
      RichEdit1.Clear;
      FileName := ExtractFilePath(Application.ExeName) + 'Zola1Mo.txt';
      TopChrono;
      with RichEdit1 do begin
        Lines.BeginUpdate;
        Clear;
        Lines.LoadFromFile(FileName);
        Lines.EndUpdate;
      end;
      Edit1.Text := fGoMoKo(TailleFichier(FileName));
     
      SLSource := TStringList.Create;
      SLSource.Assign(RichEdit1.Lines);
      RichEdit2.Clear;
    end;
     
    procedure TForm1.bDixFoisAssignStandardClick(Sender: TObject);
    var i: integer;
    begin
      TopChrono; Sablier;
      for i := 1 to 10 do begin
        RichEdit1.Lines.BeginUpdate;
        RichEdit1.Clear;
        RichEdit1.Lines.Assign(SLSource);
        RichEdit1.Lines.EndUpdate;
      end;
      RichEdit2.Lines.Add('RichEdit1.Assign Standard : mis ' + fChrono);
      Sablier;
    end;
     
    procedure AssignMaison(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;
     
    procedure TForm1.bDixFoisAssignMaisonClick(Sender: TObject);
    var i: integer;
    begin
      TopChrono; Sablier;
      for i := 1 to 10 do begin
        RichEdit1.Lines.BeginUpdate;
        RichEdit1.Clear;
        AssignMaison(SLSource, RichEdit1);
        RichEdit1.Lines.EndUpdate;
      end;
      RichEdit2.Lines.Add('AssignMaison(SLSource,RichEdit1) : mis ' + fChrono);
      Sablier;
    end;
    A+.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. Lenteur du read line
    Par qdqdfqfdqdxcwcrzsdfw dans le forum Langage
    Réponses: 22
    Dernier message: 17/01/2007, 11h29
  2. RichEdit->Lines comment indiquer l'indexe de ligne
    Par fastzombi dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/12/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo