Aller au contenu

Allocation de Mémoire


Wolfae

Messages recommandés

Niveau requis Intermédiaire

Temps estimé : 30 minutes

Bonjour,

 

Ce nouveau 'chapitre' est fait par demande de 'shaip' (Si j'ai bien compris ta requête.. ><') et a comme sujet l'allocation de mémoire et le Ramasse-miettes. Le CLR fait son travail lui-même, et le fait mieux que nous; Laissez-le le faire si vous ne savez pas ce que c'est..

 

Révélation

 

Le Garbage Collector (Ramasse-miettes) désalloue automatiquement (Ou presque..) et release (libère) la mémoire pour les objets créés dans l'application. Quand l'objet n'est plus référencé, il est directement supprimé et la mémoire est libérée. On peut forcer le garbage collector à faire son travail, avec une méthode non asynchrone GC.Collect() puis GC.WaitForPendingFinalizers().

//C#
//Program.cs
class Program
{
  static void Main(string[] args)
  {
    GC.Collect();
    GC.WaitForPendingFinalizers();
  }
}
//Utilisation de GC.Collect() et GC.WaitForPendingFinalizers()//

 

Cette méthode force, comme dit précédemment, la collection par le GC (=Garbage Collector).

 

Notes : -GC.Collect() est expensive, et devrait mieux être utilisée quand vous en avez vraiment besoin, et devez l'utiliser pour faire une collecte GENERALE.

 

  • Si GC.Collect() se trouve dans une même méthode qu'une var que vous avez et dont vous voulez release la mémoire, ce ne sera pas fait, puisque celle-ci sera considérée toujours appelée/référencée. (Le GC n'acte que sur ce qui n'a plus été référencé. Et puisque le GC serait "appelé" dans la même méthode que la variable, la méthode sera toujours en cours.)
  • GC.Collect() ne devrait pas être utilisée pour clear un seul truc.

 

 

Tips & Tricks 1 : Using

 

Révélation

 

Peu connaissent la deuxième "using" : A part pour faire des références aux namespaces, using peut être utilisée comme ceci :

//C#
//Random code snippet
[..]
Bot bta;
using(bta)
{
  //Utilisez BTA.
}
[..]
Comme ça, après l'utilisation, BTA est directement Disposée (Voir Tips & Tricks 2). On peut utiliser plusieurs vars au lieu d'une seule :
using(Bot bta = new Bot(), 
       Bot btax = new Bot() )
{
  //Utilisez BTA et BTAX.
}
 


Tips & Tricks 2 : Dispose

 

Révélation

 

Exemple
//C#
//disposeexample.cs

using System;
using System.ComponentModel;

class Exemple: IDisposable
{
 private bool disposed = false; // Si l'objet est déjà disposé.
 private Component component = new Component(); // Le composant..
 private Intptr handle; // Handle.

 public void Dispose()
 {
   Dispose(true);
   GC.SuppressFinalize(this);
 }

 private void Dispose(bool disposing)
 {
    if(!this.disposed)
    {
      if(disposing)
          component.Dispose();

      CloseHandle(handle);
      handle = IntPtr.Zero;
    }
    disposed = true;
 }

 //INTEROP
 [system.Runtime.InteropServices.DllImport("Kernel32")]
 private extern static Boolean CloseHandle(IntPtr handle);

 ~Exemple()
 {
   Dispose(false); //Et hop, on dispose. :b
 }
}
Interop, Handle, etc.. Ca fait assez avancé. Je recommande moins Dispose, sauf si vous savez vraiment ce que vous faites. Utilisez GC.Collect() et GC.WaitForPendingFinalizers() plutôt que ceci, surtout si vous avez plusieurs objets inutilisés.

 

 

Cordialement,

Heaven Team 2012

Non mudera, potius mori quam foedari.

 

Connaissances : C#, VB.net, JavaScript, PHP

Libre service.

Lien vers le commentaire
  • Réponses 0
  • Created
  • Dernière réponse

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


  • Flux d'Activité

    1. 5

      Metin2 Download - Migration

    2. 0

      C++ Wiki Ingame

    3. 38

      Installer Ancestra Remake 54

    4. 2

      Ajouter une Commande Lau

    5. 2

      Ajouter une Commande Lau

    6. 2

      Ajouter une Commande Lau

    7. 38

      Installer Ancestra Remake 54

    8. 5

      Metin2 Download - Migration

    9. 3

      L'E3 2021, on en parle !

  • En ligne récemment

    Aucun utilisateur enregistré regarde cette page.

×
×
  • Créer...

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.