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 :

Occupation mémoire variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut Occupation mémoire variables
    Bonjour,

    Simple petite question qui m'amène ici.
    Je me demande si il est possible de 'supprimer' un espace mémoire réservé par une variable ?

    Par exemple, lorsque je fais une recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Recherche = Sheets(1).Range("A:A").Find("toto")
    Set Recherche = Nothing
    Nous sommes bien d'accord que l'attribution de Nothing à la variable Recherche va supprimer son espace mémoire ?

    De même, est-il possible de faire pareil pour des Integer/Double/...

    Je pose cette question, car j'ai remarqué que mon programme qui traite de très gros fichiers .csv (60 000 lignes) se ralentit de plus en plus après chaque exécution. Je me demande donc si une petite optimisation des variables ne pourrait pas aider un petit peu...

    Merci d'avance.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Citation Envoyé par iperkut Voir le message
    De même, est-il possible de faire pareil pour des Integer/Double/...
    salut

    je ne crois pas que l'on y gagnerait vraiment beaucoup, ni que ce soit la seule raison des ralentissements que tu constates.
    Quelques conseils toutefois (en plus de la destruction des objets par set = nothing):
    - d'abord et surtout : ne pas abuser des variables publiques, ni même "générales" (celles déclarées avant toute procédure), ni mêmes "static". Une variable (non "static") dimensionnée au sein même d'une procédure n'a une durée de vie que pendant la procédure et "disparait" de la mémoire au "End Sub"), ce qui n'est pas le cas d'une variable "générale" et encore moins d'une variable publique.
    - lorsque les données d'un tableau ne servent plus, ne pas hésiter à redimensionner le tableau
    - ne pas abuser des types variant
    Voilà pour l'espace de stockage, mais, une autre fois, je ne pense pas que ce soit là la vraie ou la seule véritable cause de tes ralentissements.

  3. #3
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    Ne pas abuser des variable tout court.
    Cependant, avoir le reflexe de vouloir détruire les variables quand elles ne sont plus utilisé est un tres tres bon reflex.
    Autant sur des machines modernes et avec un language comme le VBA, tu ne verra pratiquement aucune différence, autant sur des machines un peu moins performante et d'autre language moins récent ca sera plus que nécessaire.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Est-il donc possible de supprimer une variable ?

    Autre question,, lequel de ces deux codes est le plus 'performant' / propre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a=90
    for i = 1 to 10000000
    x=a*10
    y=100
    z = x*y
    next i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a=90
    for i = 1 to 10000000
    z = a*10*100 'Dans le cas ou on suppose que y est toujours = 100
    next i

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Citation Envoyé par iperkut Voir le message
    Est-il donc possible de supprimer une variable ? *
    ....

    Autre question,, lequel de ces deux codes est le plus 'performant' / propre ? **
    * non (du moins pas à ma connaissance, sauf pour les variables objet)
    ** ni l'un ni l'autre, dès lors que, n'ayant pas typé tes variables, elles sont du type variant (que j'ai dénoncé dans mon premier message)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Citation Envoyé par babaothe Voir le message
    * non (du moins pas à ma connaissance, sauf pour les variables objet)
    ** ni l'un ni l'autre, dès lors que, n'ayant pas typé tes variables, elles sont du type variant (que j'ai dénoncé dans mon premier message)
    Pardon, elle le sont dans mon esprit, je ne l'ai juste pas précisé.
    Elle sont toutes déclarées en Integer.

    Mais est-il plus efficace de faire quasiment directement le calcul comme dans la méthode 2, ou plutôt de passer par des variable temporaire dans la méthode 1.

Discussions similaires

  1. occupation mémoire et CPU
    Par nialaz dans le forum Général Python
    Réponses: 6
    Dernier message: 16/12/2006, 12h23
  2. Réponses: 5
    Dernier message: 02/10/2006, 13h35
  3. Réponses: 11
    Dernier message: 13/01/2006, 15h30
  4. Occupation mémoire
    Par Débéa dans le forum Oracle
    Réponses: 6
    Dernier message: 24/08/2005, 15h24
  5. différence entre varchar et text pour l'occupation mémoire
    Par champion dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/12/2004, 18h02

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