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

C# Discussion :

Destructeur toujours appellé ?


Sujet :

C#

  1. #21
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    dans le finalize il reste possible d'appeler une méthode statiques quelque part qui s'occupera de faire ton traitement, ou au moins de se noter quelque part que ca doit etre fait et de rendre la main au finalize directement

  2. #22
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    J'aime pas trop passer par du statique pour gérer des action sur une classe mais ça marche parfois en effet
    Par contre, il ne faut pas oublier que dans ce cas on passe par défaut dans un contexte multithreadé et il ne faut pas oublier d'utiliser des lock() pour éviter les problèmes.

  3. #23
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Et si je vire le finalize pour ne laisser alors que le Dispose, celui-ci sera-t'il appellé par le GC ?

  4. #24
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Et si je vire le finalize pour ne laisser alors que le Dispose, celui-ci sera-t'il appellé par le GC ?
    non
    il faut l'appeler toi même

  5. #25
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Ok.

    Donc quand un objet est lié à des données en DB qui devraient disparaître à la mort de l'objet, il est impossible par ces principe de garantir que cela sera le cas si par exemple, le CLR est remplacé ou l'application fermée.

    Finallement on ne peut rien faire dans ces deux cas où finalize est appellé sur l'ensemble des objets en mémoire (vu que rien n'est alors utilisable pour opérer sur la DB) ?

  6. #26
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    C'est pour ça que j'ai horreur du GC
    Quand on veux programmer une véritable action à la mort d'un objet, on est obligé d'employer des tricks mais le refcount ça marche assez bien.

  7. #27
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par smyley Voir le message
    C'est pour ça que j'ai horreur du GC
    Quand on veux programmer une véritable action à la mort d'un objet, on est obligé d'employer des tricks mais le refcount ça marche assez bien.
    A mon avis, c'est pas une bonne idée de se baser sur la "mort" d'un objet pour effectuer une action...

    Dans le cas de Sergejack, je pense que la meilleure solution serait de mettre le code de nettoyage dans le Session_End du Global.asax

  8. #28
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par tomlev Voir le message
    A mon avis, c'est pas une bonne idée de se baser sur la "mort" d'un objet pour effectuer une action...
    C'est sur que c'est normalement une très mauvaise idée mais il y a des fois où l'on ne peut pas vraiment faire autrement ...

  9. #29
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par tomlev Voir le message
    A mon avis, c'est pas une bonne idée de se baser sur la "mort" d'un objet pour effectuer une action...

    Dans le cas de Sergejack, je pense que la meilleure solution serait de mettre le code de nettoyage dans le Session_End du Global.asax
    J'y ai songé, mais il resterait le problème de l'impossibilité de faire du nettoyage à l'arrêt du site (site stoppé ou dll remplacées).

    Et comme je le disais, refcount ou quoi que ce soit, à l'arrêt du site, les jeux sont faits, rien ne va plus.


    Mon nettoyage DB, je vais devoir le faire ailleurs en fonction de paramètres décisionnels "est-ce que ceci semble devoir être supprimé ?".

    Merci pour les éclaircissements.

  10. #30
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    les tables # sont supprimés à la fermeture de la connexion qui les a créés ... si ca peut aider ...

    enfin voir si y a pas moyen de gérer ca dans le sgbd directement

  11. #31
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    J'y ai songé, mais il resterait le problème de l'impossibilité de faire du nettoyage à l'arrêt du site (site stoppé ou dll remplacées).
    Citation Envoyé par Sergejack Voir le message
    Et comme je le disais, refcount ou quoi que ce soit, à l'arrêt du site, les jeux sont faits, rien ne va plus.
    Justement, j'en suis pas si sûr... tu as fait des tests ? à mon avis les évènements d'arrêt de l'application sont quand même exécutés avant que l'appli ne soit déchargée et redémarrée. Donc avec un peu de chance, le Session_End aussi...

  12. #32
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Justement, j'en suis pas si sûr... tu as fait des tests ? à mon avis les évènements d'arrêt de l'application sont quand même exécutés avant que l'appli ne soit déchargée et redémarrée. Donc avec un peu de chance, le Session_End aussi...
    Bon, ben j'ai rien dit... IIS est moins malin que je pensais
    J'ai fait le test, même le Application_End n'est pas exécuté. C'est un peu crade je trouve

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/11/2007, 11h15
  2. Réponses: 2
    Dernier message: 12/07/2007, 10h12
  3. destructeur pas appelé ?
    Par NiamorH dans le forum C++
    Réponses: 28
    Dernier message: 27/04/2007, 16h20
  4. Réponses: 9
    Dernier message: 07/10/2006, 10h54
  5. [destructeur] [pas appelé]
    Par Gonath dans le forum C++
    Réponses: 11
    Dernier message: 23/02/2006, 18h37

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