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

Macros et VBA Excel Discussion :

Libérer rapidement un objet utilisant bcp de mémoire vive


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut Libérer rapidement un objet utilisant bcp de mémoire vive
    Bonjour,

    J'ai effectué de longues recherches sur le net sans réussir à trouver mon bonheur, je suis désespéré.

    J'ai créé une application en VBA qui manipule de très grosses quantité de données. Entre autre j'ai une classe cls1 très simple (3 ou 4 propriétés). Une classe cls2 qui contient principalement un tableau 2000*15 d'instances de cls1 et une classe cls3 qui contient en moyenne une cinquantaine d'instances de cls2.

    Je remplis tout ça à partir d'un gros fichier texte, ça prend environ 40s.
    J'effectue ensuite de nombreux calculs sur ces objets : 23s (Pourtant c'était vraiment la partie qui me faisait peur).
    A cette étape tout est fini pour moi, Excel prend 250 Mo en mémoire et là c'est le drame, mon dernier set cls3 = nothing prend 15 min.

    J'ai essayer de l'aider avec des boucles de set = nothing sur les sous-éléments, des erase sur les tableaux... Aucun changement.

    Si quelqu'un a une idée, qu'il soit béni !!!

    J'en suis réduit à copier mes résultats dans un fichier texte et killer mon excel histoire de pouvoir relancer un calcul sans attendre.

    Merci pour votre aide

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    pas moyen de mettre un bout de code allégé des différentes classes?

    y-a-t-il des instructions dans les événements Terminate des classes qui pourrait expliquer la lenteur?
    combien prend de temps la libération d'une instance de cls2? et de cls1?

    250Mo c'est pas énorme en soit, mais si il y a des millions de petits objets/variables à libérer dans des boucles ça fait beaucoup

  3. #3
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    merci pour ta réponse.

    Il y a effectivement de très nombreux petits objets et c'est ça qui doit prendre du temps. C'est surtout la libération du cls2 qui prend du temps (cls1 contient une 50aine de cls2 qui contient 100 000 cls3). Rien de spécial dans les terminate.

    En fait j'ai réglé le problème en réécrivant tout en VB.net et générant une dll que j'utilise dans excel. Ca tourne comme une Ferrari !

    Merci en tout cas. Je ne suis pas informaticien mais plus je m'y mets et plus ça me simplifie la vie dans mon métier (Je viens d'un monde où l'on est "programmeur" quand on sait utiliser l'enregistreur de macro excel). Et ce site regorge vraiment de très bon tutoriaux et de bons conseils sur les forums.

Discussions similaires

  1. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  2. Utilisation de la mémoire vive par un programme
    Par Pixcoder dans le forum C++
    Réponses: 13
    Dernier message: 25/09/2006, 12h36
  3. Mettre un objet utilisant COM dans un vecteur
    Par 0xYg3n3 dans le forum MFC
    Réponses: 7
    Dernier message: 18/04/2005, 15h50
  4. Utilisation de la mémoire vive....
    Par Neilos dans le forum Windows
    Réponses: 9
    Dernier message: 24/11/2003, 11h09
  5. Objet et liberation de mémoire ...
    Par Mouss26 dans le forum Langage
    Réponses: 4
    Dernier message: 17/03/2003, 12h12

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