Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1450 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  De l'utilité des "Set truc=Nothing"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

De l'utilité des "Set truc=Nothing"

n°610461
Profil sup​primé
Posté le 13-01-2004 à 14:59:39  answer
 

Je fai de l'ASP en VBScript.
 
j'ai recupere du code existant et a la fin de chaque fonction les variables qui étaient déclarées au debut par "dim truc" sont "effacées" a la fin de la fonction par "Set truc=nothing".
 
je me demandai si ct vraiment obligatoire ?? c'est censé être un langage de haut niveau, il fait pas le ménage lui même ?


Message édité par Profil supprimé le 13-01-2004 à 15:39:31
mood
Publicité
Posté le 13-01-2004 à 14:59:39  profilanswer
 

n°610574
ixemul
Nan mais sans blague ! ⚡
Posté le 13-01-2004 à 16:27:35  profilanswer
 

le C++ est un langage de haut niveau egalement, il n'empeche qu'il faut tout de meme liberer les objets apres utilisation, en vb, c'est la meme chose, le Set MonObjet = nothing libere la memoire allouée à un objet. Sinon, en effet, implicitement VB libere l'objet lorsque l'on sort de son champs de visibilité (sortie de fonction ou procedure), mais ca, c'est la theorie :D, en pratique, il vaut mieux toujours liberer ce que l'on a alloué

n°610584
Profil sup​primé
Posté le 13-01-2004 à 16:31:56  answer
 

:jap:

n°611583
MagicBuzz
Posté le 14-01-2004 à 13:32:02  profilanswer
 

Non, c'est à la fois inutile et erroné.
 
Set truc = Nothing ne s'applique qu'aux OBJETS, pas aux variables.
Deplus, si l'objet en question contient une méthode ".close" ou ".dispose", il faut l'éxécuter en premier.
 
Pour des variables de types "normaux" (nombres, chaînes de caractères, et array et structs contenant ces types) le nothing est inutile, puisqu'il est éxécuté au moment où la référence est supprimée. (l'affectation à Nothing éxécute le destructeur de l'objet, or les types "simples" n'ont pas de destructeur, donc c'est superflu)

n°611585
ixemul
Nan mais sans blague ! ⚡
Posté le 14-01-2004 à 13:36:42  profilanswer
 

MagicBuzz a écrit :

Non, c'est à la fois inutile et erroné.
 
Set truc = Nothing ne s'applique qu'aux OBJETS, pas aux variables.
Deplus, si l'objet en question contient une méthode ".close" ou ".dispose", il faut l'éxécuter en premier.
 
Pour des variables de types "normaux" (nombres, chaînes de caractères, et array et structs contenant ces types) le nothing est inutile, puisqu'il est éxécuté au moment où la référence est supprimée. (l'affectation à Nothing éxécute le destructeur de l'objet, or les types "simples" n'ont pas de destructeur, donc c'est superflu)


 
il est totalement impossible de faire un Set ... = nothing sur autre chose qu'un objet, ce n'est donc pas superflux, mais tout simplement impossible (Vb hurle au blaspheme au moment meme ou tu effleure la touche F5 :D)

n°611586
MagicBuzz
Posté le 14-01-2004 à 13:37:46  profilanswer
 

Ca dépends, si tu met pas "option explicit" au début, ça passe (en ASP et en VBS en tout cas, en VB chais pas, j'ai pas essayé :D)
Par contre, en ASP, je passe mes journée à virer ce genre de ligne du code parceque les stagiaires qui bossent avec moi c'est des gros gorets :D


Message édité par MagicBuzz le 14-01-2004 à 13:38:52
n°611591
ixemul
Nan mais sans blague ! ⚡
Posté le 14-01-2004 à 13:43:39  profilanswer
 

MagicBuzz a écrit :

Ca dépends, si tu met pas "option explicit" au début, ça passe (en ASP et en VBS en tout cas, en VB chais pas, j'ai pas essayé :D)
Par contre, en ASP, je passe mes journée à virer ce genre de ligne du code parceque les stagiaires qui bossent avec moi c'est des gros gorets :D


 
bha en VB, sans option explicit, n'importe quelle variables non declarée est implicitement declarée en tant que Variant et donc un objet, donc pas de pb.. mais quand on veut(doit !!!! :D) faire propre, on declare tout, alors un set <variable_et_non_pas_objet> = <qquechose> ne marche pas  
 
Ceci dit, en VB pure en effet :D
 
L'option Explicit c'est bon, mangez-en !  :o  (comique de repetition inside  [:kilgoreweb] )

n°611596
MagicBuzz
Posté le 14-01-2004 à 13:55:30  profilanswer
 

En VBS/ASP, quand on met l'option explicit, on doit mettre un dim, mais on peut pas mettre de type, alors ça sert à rien :D

n°611765
art_dupond
je suis neuneu... oui oui !!
Posté le 14-01-2004 à 17:11:55  profilanswer
 

ben ca évite des fautes de frappass :o


---------------
oui oui
n°612488
mareek
Et de 3 \o/
Posté le 15-01-2004 à 13:38:15  profilanswer
 

ixemul a écrit :

le C++ est un langage de haut niveau egalement, il n'empeche qu'il faut tout de meme liberer les objets apres utilisation, en vb, c'est la meme chose, le Set MonObjet = nothing libere la memoire allouée à un objet. Sinon, en effet, implicitement VB libere l'objet lorsque l'on sort de son champs de visibilité (sortie de fonction ou procedure), mais ca, c'est la theorie :D, en pratique, il vaut mieux toujours liberer ce que l'on a alloué


en pratique, faire "set MaVariable=nothing" à la fin d'une fonction ou dans un class_terminate est inutile, VB se démerde très bien tout seul [:spamafote]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
mood
Publicité
Posté le 15-01-2004 à 13:38:15  profilanswer
 

n°612493
ixemul
Nan mais sans blague ! ⚡
Posté le 15-01-2004 à 13:40:38  profilanswer
 

mareek a écrit :


en pratique, faire "set MaVariable=nothing" à la fin d'une fonction ou dans un class_terminate est inutile, VB se démerde très bien tout seul [:spamafote]


 
En pratique :D mais j'ai deja eu le cas d'objet ActiveX assez porcs pour poser problemes s'ils n'etaient pas libérés...  [:kilgoreweb]

n°612494
mareek
Et de 3 \o/
Posté le 15-01-2004 à 13:41:35  profilanswer
 

MagicBuzz a écrit :

En VBS/ASP, quand on met l'option explicit, on doit mettre un dim, mais on peut pas mettre de type, alors ça sert à rien :D


si, ça sert quand même.
Si tu fait une faute de frappe sur le nom de ta variable sans option explicit ("MaVariabIeDeLaMortQuiTue" au lieu de "MaVariableDeLaMortQuiTue" par ex.) VB va croire que c'est une nouvelle variable et tu va en chier comme un Russe pour débugger ton code.  
 
Franchement, faire du VB sans option explicit c'est suicidaire


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°612497
MagicBuzz
Posté le 15-01-2004 à 13:42:34  profilanswer
 

Sauf dans certains cas, avec des objets contenant eux-même d'autres objets assychrones (OLEDB par exemple). Parfois VB n'arrive pas à détruire tout seul l'objet, car il utilise un destructeur générique qui ne fait que désaouler les ressources de l'objet, mais pas les threads fils. Le destructeur explicite (appelé avec set xx = nothing) contient normalement l'appel aux méthodes de désalocation des ressources imbriquées.

n°612502
mareek
Et de 3 \o/
Posté le 15-01-2004 à 13:44:08  profilanswer
 

MagicBuzz a écrit :

Sauf dans certains cas, avec des objets contenant eux-même d'autres objets assychrones (OLEDB par exemple). Parfois VB n'arrive pas à détruire tout seul l'objet, car il utilise un destructeur générique qui ne fait que désaouler les ressources de l'objet, mais pas les threads fils. Le destructeur explicite (appelé avec set xx = nothing) contient normalement l'appel aux méthodes de désalocation des ressources imbriquées.


OK
t'as des exemples précis d'objets qui posent problème ?


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°612518
MagicBuzz
Posté le 15-01-2004 à 13:51:35  profilanswer
 

Le drivers ODBC pour Oracle livré avec la version 8.0.5 par exemple. Une fois sur deux, il va conserver la connection (ou pire, le recordset) ouvert en mémoire. Résultat, au bout de quelques heures d'utilisation, vous plantez la base qui est remplie de dead locks.

n°612549
drasche
Posté le 15-01-2004 à 14:28:30  profilanswer
 

Dans les object models un peu touffus t'as intérêt à gérer finement la gestion des ressources (chez nous par exemple [:kiki]).
 
Par exemple, je conseille fortement une fonction CleanUp avant de faire le Set Machin = Nothing histoire de ne pas avoir de surprise au moment du terminate lui-même.
 
De toute façon, mieux vaut ne jamais prendre le problème des ressources à la légère. Tu sais jamais dire à l'avance jusqu'à quel point ton projet est susceptible de gonfler.
 
Au pire si tu fais rien, ton application part en idle et reste en mémoire alors que tu voulais cliquer. Evitez si possible l'emploi du End [:joce]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°612590
MagicBuzz
Posté le 15-01-2004 à 15:01:25  profilanswer
 

Disons que si on écrit proprement le destructeur, le Set machin = Nothing suffit. En effet, le destructeur est censé, avant de se terminer, vérifier que tout les traîtements assynchrones sont bien finis, et toutes les ressources libérées.
 
Par exemple, imaginons un objet qui contient un tableau d'objets, son destructeur devra ressembler à ça :
 


sub destructeur()
    for i = lbound(Me.tab) to ubound(Me.tab)
        if isObject(Me.tab(i)) then
             Set Me.tab(i) = Nothing
        end if
    next
    Me.tab = null ' Ca par contre c'est rigoureusement inutile en VB c'est juste pour la beauté du geste :D
end sub


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  De l'utilité des "Set truc=Nothing"

 

Sujets relatifs
encore et encore du code pour la maitrise du truc[DOS] commande 'SET' et les nombres....
[ALGO] Un truc à ArbreMon hébergeur utilise PHPSuExec mais je ne comprend rien à ce truc.
Access, besoin d'aide assez urgent, truc de baseTransformer [=?windows-1258?Q?S=E9bastien? =] en un truc francais
[CSS] Heritage ou un truc dans le genre... :DUn truc tout con...
envois de fichier - truc de ouf[Htaccess] Un truc un peux plus complexe...
Plus de sujets relatifs à : De l'utilité des "Set truc=Nothing"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR