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

Delphi Discussion :

Lenteur de mon code


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut Lenteur de mon code
    Ce bout de code sert à mettre des fichiers ressources dans une exe pendant son execution. Je me demandais si c'était la fonction AddResToFile qui était lente ou allors si c'était du au fait que je ne connait presque rien aux threads et que je l'ai utilise peut être mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
    ima:tmemorystream;
    i:integer;
    cible:string;
     
    while (i<= high(chemin)) and (not stop)  do
      begin
         image2.Picture.LoadFromFile(chemin[i]);       
         ima:=tmemorystream.Create;
         image2.Picture.Graphic.SaveToStream(ima);
         AddResToFile(cible, 'IMA'+inttostr(i), ima, 'IMAGE');
         ima.Free;
      end;

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 409
    Par défaut
    essayes en chargeant directement ton image dans ton stream sans passer par la variable intermédiare image2, tu peux aussi éviter de creer/détruire ton stream dans la boucle, tu le crée avant et tu le détruis une fois toutes tes images ajoutées

  3. #3
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    essayes en chargeant directement ton image dans ton stream
    C'est fait

    tu le crée avant et tu le détruis une fois toutes tes images ajoutées
    J'y avait penser mais quand je fait ca on dirait qu'il garde en mémoire toute les ancienne image dans le stream ce qui fait que la grosseur des ressource est presque exponentiel.

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par poly128
    J'y avait penser mais quand je fait ca on dirait qu'il garde en mémoire toute les ancienne image dans le stream ce qui fait que la grosseur des ressource est presque exponentiel.
    Et avec un Position := 0 ?

    Mais ce que tu peux surtout faire c'est ne pas utiliser utiliser AddResToFile mais la combinaison BeginUpdateRes/AddResource/EndUpdateRes
    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
    var ima : TMemoryStream;
        ResHandle, i : integer;
        cible : string;
     
    ima := TMemoryStream.Create;
    try
      ResHandle := BeginUpdateRes(cible);
      try
        while (i <= High(chemin)) and (not stop) do
        begin
          ima.Size := 0;
          ima.LoadFromFile(chemin[i]);       
          AddResource(ResHandle, 'IMA'+inttostr(i), ima, 'IMAGE');
        end;
        EndUpdateRes(ResHandle);
      except
        try EndUpdateRes(ResHandle, True); except end;
        raise;
      end;
    finally
      ima.Free;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Wouuaa la ca vat vite. Je fait en 10 seconde ce que je faisait en une heure . Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2002] Lenteur de mon code !
    Par jerome94 dans le forum VBA Access
    Réponses: 11
    Dernier message: 17/10/2011, 13h58
  2. lenteur excessive de l'execution de mon code!
    Par nath-0-0 dans le forum WinDev
    Réponses: 13
    Dernier message: 29/12/2006, 17h50
  3. Mon code n'est pas interprété !
    Par korriganez dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 15h46
  4. Réponses: 1
    Dernier message: 21/02/2005, 12h40
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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