Connaissez-vous un moyen de détruire un objet de façon déterministe ?
(j'ai besoin d'exécuter des opérations importantes juste au moment où
l'objet est détruit mais on ne contrôle pas le moment du déclenchement du
garbage collector).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Ambassadeur Kosh
> Bonjour,
Connaissez-vous un moyen de détruire un objet de façon déterministe ? (j'ai besoin d'exécuter des opérations importantes juste au moment où l'objet est détruit mais on ne contrôle pas le moment du déclenchement du garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de le lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi s'acharner à vouloir le detruire ? quelle importance cela peut il avoir qu'il se balade dans la mémoire en attendant de passer au Garbage ?
> Bonjour,
Connaissez-vous un moyen de détruire un objet de façon déterministe ?
(j'ai besoin d'exécuter des opérations importantes juste au moment où
l'objet est détruit mais on ne contrôle pas le moment du déclenchement du
garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de le
lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi s'acharner
à vouloir le detruire ? quelle importance cela peut il avoir qu'il se balade
dans la mémoire en attendant de passer au Garbage ?
Connaissez-vous un moyen de détruire un objet de façon déterministe ? (j'ai besoin d'exécuter des opérations importantes juste au moment où l'objet est détruit mais on ne contrôle pas le moment du déclenchement du garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de le lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi s'acharner à vouloir le detruire ? quelle importance cela peut il avoir qu'il se balade dans la mémoire en attendant de passer au Garbage ?
Paul Bacelar
"Ambassadeur Kosh" wrote in message news:
> Bonjour, > > Connaissez-vous un moyen de détruire un objet de façon déterministe ? > (j'ai besoin d'exécuter des opérations importantes juste au moment où > l'objet est détruit mais on ne contrôle pas le moment du déclenchement
du
> garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de
le
lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi
s'acharner
à vouloir le detruire ? quelle importance cela peut il avoir qu'il se
balade
dans la mémoire en attendant de passer au Garbage ?
Avec le mot clé "using", l'utilisation de l'interface IDisposable est très intuitive ;-)
-- Paul Bacelar
"Ambassadeur Kosh" <KoshNaranek@babylon5.net> wrote in message
news:eFJFXVQ3EHA.1188@tk2msftngp13.phx.gbl...
> Bonjour,
>
> Connaissez-vous un moyen de détruire un objet de façon déterministe ?
> (j'ai besoin d'exécuter des opérations importantes juste au moment où
> l'objet est détruit mais on ne contrôle pas le moment du déclenchement
du
> garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de
le
lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi
s'acharner
à vouloir le detruire ? quelle importance cela peut il avoir qu'il se
balade
dans la mémoire en attendant de passer au Garbage ?
Avec le mot clé "using", l'utilisation de l'interface IDisposable est très
intuitive ;-)
> Bonjour, > > Connaissez-vous un moyen de détruire un objet de façon déterministe ? > (j'ai besoin d'exécuter des opérations importantes juste au moment où > l'objet est détruit mais on ne contrôle pas le moment du déclenchement
du
> garbage collector).
le meilleur moyen de lui faire faire ces operations importantes, c'est de
le
lui demander en passant par une methode.
sinon, le Dispose sur les objets disposables, mais bon, pourquoi
s'acharner
à vouloir le detruire ? quelle importance cela peut il avoir qu'il se
balade
dans la mémoire en attendant de passer au Garbage ?
Avec le mot clé "using", l'utilisation de l'interface IDisposable est très intuitive ;-)
-- Paul Bacelar
Bruno Jouhier [MVP]
"Thierry Laurent" <Thierry a écrit dans le message de news:
Bonjour,
Connaissez-vous un moyen de détruire un objet de façon déterministe ? (j'ai besoin d'exécuter des opérations importantes juste au moment où l'objet est détruit mais on ne contrôle pas le moment du déclenchement du garbage collector).
L'interface IDisposable et la construction "using" sont la voie à suivre si ton object a une référence vers une resource non managée (voir les autres posts). Dans ce cas, tu appelles la méthode Dispose (ou tu laisses using le faire pour toi) lorsque tu n'as plus besoin de l'objet. Ca libèrer la ressource non managée (ce n'est pas magique, tu dois le coder dans ton Dispose), mais ça ne libère pas la mémoire utilisée par l'objet. Ca, c'est le GC qui s'en charge.
Si tu tiens vraiment à forcer la libération de la mémoire, il faut: 1) t'assurer que toutes les références vers l'objet ont été coupées (reassignées, remises à null, etc.) 2) appeler GC.Collect() pour forcer un cycle de GC complet (c'est coûteux, surtout si tu as beaucoup d'objets en mémoire).
Si tu as un traitement à faire au moment précis où l'objet est libéré, tu peux utiliser un "finaliseur" (la syntaxe est comme un destructeur C++). Dans ce cas, tu peux appeler GC.WaitForPendingFinalizers() pour forcer l'exécution de tous les finaliseurs (sinon, ton finaliseur sera appelé directement par le GC, dans un thread que tu ne contrôles pas).
L'utilisation des finaliseurs est déconseillée car ça oblige le GC à faire 2 passes pour libérer l'objet (1 passe pour le mettre dans la queue de finalisation + une passe pour libérer la mémoire). Si tu l'utilises de manière intensive, ça risque de diminuer l'efficacité du GC.
Un conseil: dans un premier temps, laisse le GC faire son boulot le plus naturellement possible. Ensuite, si tu as vraiment des problèmes ou des besoins très spécifiques (et vraiment justifiés), regarde les finaliseurs et les APIs GC, mais ne fonce pas dans cette direction sans avoir acquis un peu d'expérience avec le GC. Quel genre de traitement as tu besoin de faire au moment où l'objet est libéré?
Bruno.
D'avance, merci pour votre aide, Thierry
"Thierry Laurent" <Thierry Laurent@discussions.microsoft.com> a écrit dans
le message de news: 10D3D713-BAD0-4306-B869-D7BD55BB3B59@microsoft.com...
Bonjour,
Connaissez-vous un moyen de détruire un objet de façon déterministe ?
(j'ai besoin d'exécuter des opérations importantes juste au moment où
l'objet est détruit mais on ne contrôle pas le moment du déclenchement du
garbage collector).
L'interface IDisposable et la construction "using" sont la voie à suivre si
ton object a une référence vers une resource non managée (voir les autres
posts). Dans ce cas, tu appelles la méthode Dispose (ou tu laisses using le
faire pour toi) lorsque tu n'as plus besoin de l'objet. Ca libèrer la
ressource non managée (ce n'est pas magique, tu dois le coder dans ton
Dispose), mais ça ne libère pas la mémoire utilisée par l'objet. Ca, c'est
le GC qui s'en charge.
Si tu tiens vraiment à forcer la libération de la mémoire, il faut:
1) t'assurer que toutes les références vers l'objet ont été coupées
(reassignées, remises à null, etc.)
2) appeler GC.Collect() pour forcer un cycle de GC complet (c'est coûteux,
surtout si tu as beaucoup d'objets en mémoire).
Si tu as un traitement à faire au moment précis où l'objet est libéré, tu
peux utiliser un "finaliseur" (la syntaxe est comme un destructeur C++).
Dans ce cas, tu peux appeler GC.WaitForPendingFinalizers() pour forcer
l'exécution de tous les finaliseurs (sinon, ton finaliseur sera appelé
directement par le GC, dans un thread que tu ne contrôles pas).
L'utilisation des finaliseurs est déconseillée car ça oblige le GC à faire 2
passes pour libérer l'objet (1 passe pour le mettre dans la queue de
finalisation + une passe pour libérer la mémoire). Si tu l'utilises de
manière intensive, ça risque de diminuer l'efficacité du GC.
Un conseil: dans un premier temps, laisse le GC faire son boulot le plus
naturellement possible. Ensuite, si tu as vraiment des problèmes ou des
besoins très spécifiques (et vraiment justifiés), regarde les finaliseurs et
les APIs GC, mais ne fonce pas dans cette direction sans avoir acquis un peu
d'expérience avec le GC. Quel genre de traitement as tu besoin de faire au
moment où l'objet est libéré?
"Thierry Laurent" <Thierry a écrit dans le message de news:
Bonjour,
Connaissez-vous un moyen de détruire un objet de façon déterministe ? (j'ai besoin d'exécuter des opérations importantes juste au moment où l'objet est détruit mais on ne contrôle pas le moment du déclenchement du garbage collector).
L'interface IDisposable et la construction "using" sont la voie à suivre si ton object a une référence vers une resource non managée (voir les autres posts). Dans ce cas, tu appelles la méthode Dispose (ou tu laisses using le faire pour toi) lorsque tu n'as plus besoin de l'objet. Ca libèrer la ressource non managée (ce n'est pas magique, tu dois le coder dans ton Dispose), mais ça ne libère pas la mémoire utilisée par l'objet. Ca, c'est le GC qui s'en charge.
Si tu tiens vraiment à forcer la libération de la mémoire, il faut: 1) t'assurer que toutes les références vers l'objet ont été coupées (reassignées, remises à null, etc.) 2) appeler GC.Collect() pour forcer un cycle de GC complet (c'est coûteux, surtout si tu as beaucoup d'objets en mémoire).
Si tu as un traitement à faire au moment précis où l'objet est libéré, tu peux utiliser un "finaliseur" (la syntaxe est comme un destructeur C++). Dans ce cas, tu peux appeler GC.WaitForPendingFinalizers() pour forcer l'exécution de tous les finaliseurs (sinon, ton finaliseur sera appelé directement par le GC, dans un thread que tu ne contrôles pas).
L'utilisation des finaliseurs est déconseillée car ça oblige le GC à faire 2 passes pour libérer l'objet (1 passe pour le mettre dans la queue de finalisation + une passe pour libérer la mémoire). Si tu l'utilises de manière intensive, ça risque de diminuer l'efficacité du GC.
Un conseil: dans un premier temps, laisse le GC faire son boulot le plus naturellement possible. Ensuite, si tu as vraiment des problèmes ou des besoins très spécifiques (et vraiment justifiés), regarde les finaliseurs et les APIs GC, mais ne fonce pas dans cette direction sans avoir acquis un peu d'expérience avec le GC. Quel genre de traitement as tu besoin de faire au moment où l'objet est libéré?