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

Dotnet Discussion :

[Tutoriel] La plateforme .Net : Présentation et historique


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut [Tutoriel] La plateforme .Net : Présentation et historique
    Bonjour à toutes et à tous,

    Je vous propose une nouvelle série de tutoriels pour approfondir nos connaissances de l'environnement .Net. Ce premier opus est consacré à une rapide présentation et historique de cet écosystème.

    Le prochain sera beaucoup plus technique et nous plongera au coeur d'un composant essentiel : le ramasse-miette !

    Bonne lecture.



    Retrouvez les meilleurs cours et tutoriels pour apprendre le .Net

  2. #2
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    Pourrait-on avoir un déroulé des 10 prochains chapitres de la série de tutoriels ?
    Merci
    .

  3. #3
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Pour les 10 prochains, ça va être dur. Je ne vois pas aussi loin !

    Les sujets que je compte aborder :
    • le fonctionnement du ramasse-miette (implémentation du framework .Net) ;
    • l'anatomie d'un assembly ;
    • le CLS (Common Language Specification) qui permet une interopérabilité entre les différents langages ;
    • l'interopérabilité avec du code natif (non managé) ;
    • une introduction au CIL (quelques exemples d'instructions, comment voir le code généré, comment généré du code dynamiquement)


    La liste n'est pas exhaustive, n'est pas ordonnée et est très certainement amenée à évoluer (en fonction de mes envies, des retours que j'aurais, etc...). Mais pour l'instant, c'est ce que j'envisage.

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut [Tutoriel] La plateforme .Net : Fonctionnement du ramasse-miettes
    Bonjour à toutes et à tous,

    Suite de la série de tutoriels pour approfondir nos connaissances de l'environnement .Net, où cette fois-ci nous nous plongeons dans les entrailles du fonctionnement du ramasse-miettes de la plateforme .Net.

    Bonne lecture.

    Retrouvez les meilleurs cours et tutoriels pour apprendre le .Net

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    Très bon article.

    Cependant une phrase me fait me poser quelques questions :
    Pour cela, après la phase de marquage, le ramasse-miettes ausculte une de ses structures internes appelée « Finalization list ». Cette liste contient une référence pour chaque objet disposant d'un destructeur.
    Je pensais que tous les objets étaient finalisables par défaut, d'une part parce que la classe object a un finaliseur, et en vb.net le destructeur s'écrit d'ailleurs par un Protected Overrides Sub Finalize.
    via reflector sur la classe System.Object :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), NonVersionable, __DynamicallyInvokable]
    protected virtual void Finalize()
    {
    }

    D'autre part parce qu'à l'époque où je décompilais le Framework en 2008 j'étais tombé sur des classes qui appelait suppressfinalize(this) dans le constructeur.
    Après recherche aujourd'hui je ne trouve que des classes implémentant IDisposable utilisant cette optimisation.

    De plus en cas d'héritage une classe peut avoir une classe ayant un finaliseur et une classe enfant qui ne l'a pas, donc le GC ne pourrait pas se baser sur le fait qu'il y a un finaliseur sur le dernier niveau d'héritage, et trouverais celui de Object.
    Ou alors il est codé spécifiquement pour ignorer celui d'Object ...

    Mais en effet d'un autre côté ca ne serait pas logique d'être obligé de mettre des suppressfinalize dans tous les contructeurs de classes managées simples.
    Si tu as des éclaircissements là dessus je suis preneur ^^

    Merci.
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Très bon article.
    Merci

    Citation Envoyé par Pol63 Voir le message
    Je pensais que tous les objets étaient finalisables par défaut, d'une part parce que la classe object a un finaliseur, et en vb.net le destructeur s'écrit d'ailleurs par un Protected Overrides Sub Finalize.
    via reflector sur la classe System.Object :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), NonVersionable, __DynamicallyInvokable]
    protected virtual void Finalize()
    {
    }
    En théorie, tu as raison. Tous les objets disposent d'une méthode Finalize dans la mesure où elle est définie au niveau de la classe Object. Mais cette classe en générale, et cette méthode en particulier, sont gérés de manière particulière. Ainsi, tant que cette méthode n'est pas redéfinie par une classe, les objets de cette classe ne sont pas marqués comme étant "finalisable". On peut retrouver cette information directement au sein de la MSDN :
    Citation Envoyé par MSDN
    The Object class provides no implementation for the Finalize method, and the garbage collector does not mark types derived from Object for finalization unless they override the Finalize method.
    que l'on pourrait traduire
    Citation Envoyé par MSDN
    La classe Object ne fournit pas d'implémentation pour la méthode Finalize, et le ramasse-miettes ne marque pas les types dérivés de la classe Object pour finalisation sauf s'ils redéfinissent la méthode Finalize.
    Petit point vocabulaire, que j'aurais dû préciser dans l'article (et je pense le modifier). Dans l'article je parle de destructeur, et là tu mentionnes la méthode Finalize. Il s'agit bien de la même chose. Quand j'ai écris l'article, j'ai été influencé par mon langage de prédilection : le C#.

    En effet, en C#, il n'est pas possible de redéfinir la méthode Finalize, ni même de l'appeler. La seule possibilité pour le faire est de définir un destructeur au sein d'une classe, car lorsque le ramasse-miettes appelle le destructeur d'une classe, il appelle en réalité la méthode Finalize.

    En VB.Net, l'approche est différente. Il n'y a pas de notion de destructeur, et la seule manière de procéder est donc de redéfinir cette méthode.

    Les deux approches, bien qu'équivalentes dans leur finalité, sont légèrement différentes dans leur mise en oeuvre :
    • le C# a une vision objet : lorsqu'on instancie une classe, toute la hiérarchie des constructeurs est appelée, de la classe de base (Object) à la classe finale. Il en est de même pour le destructeur, mais dans le sens inverse : de la classe finale, à la classe de base. C'est le comportement que l'on retrouve dans des langages sans ramasse-miettes comme le C++ ;
    • le VB.Net a une vision polymorphique. On redéfinie une méthode, et charge au développeur d'appeler ou non la méthode Finalize de la classe parente.


    En règle général, lorsqu'on redéfinie une méthode, il faut effectivement se poser la question de savoir si on doit appeler la méthode de la classe mère ou non. Il n'y a pas de réponse toute faite dans la mesure où cela dépend de la situation. Par contre, ici, on ne devrait pas avoir le choix. Une classe redéfinissant la méthode Finalize devrait toujours appeler la méthode de la classe mère. En effet, même avec une connaissance profonde de la manière dont est implémentée une classe, une classe fille ne peut pas accéder à tous les champs de la classe mère : ceux marqués comme private.

    Il est donc de la responsabilité d'une classe de libérer correctement toutes les ressources qu'elle possède, c'est à dire :
    • les champs privés ;
    • les champs non privés, mais introduit par la classe. Par exemple, un attribut protégé hérité de la classe mère ne doit pas être géré dans la classe fille. Mais un attribut protégé introduit dans la classe fille doit être géré par cette même classe fille.


    Je préfère l'approche du C#, car sur ce point précis, elle ne laisse pas le choix au programmeur pour un détail d'implémentation où il ne devrait de toutes les façons, pas avoir le choix.

Discussions similaires

  1. Suite de 38 tutoriels sur ASP.NET MVC
    Par Louis-Guillaume Morand dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2009, 15h06
  2. [Plateforme.NET]Comment ajouter un autre langage ?
    Par reggae dans le forum Framework .NET
    Réponses: 4
    Dernier message: 14/12/2005, 21h16

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