Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Cette documentation est archivée et n’est pas conservée.

GC, classe

Contrôle le garbage collector (ramasse-miettes) du système, un service qui récupère automatiquement la mémoire inutilisée.

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)

public static class GC

Le type GC expose les membres suivants.

  NomDescription
Propriété publiqueMembre statiquePris en charge par XNA FrameworkMaxGenerationObtient le nombre maximal de générations actuellement pris en charge par le système.
Début

  NomDescription
Méthode publiqueMembre statiqueAddMemoryPressureInforme l'exécution d'une allocation volumineuse de mémoire non managée qui doit être prise en considération lors de la planification du garbage collection.
Méthode publiqueMembre statiqueCancelFullGCNotificationAnnule l'inscription de la notification de garbage collection.
Méthode publiqueMembre statiquePris en charge par XNA FrameworkCollect()Force un garbage collection immédiat sur toutes les générations.
Méthode publiqueMembre statiqueCollect(Int32)Force un garbage collection immédiat de la génération zéro jusqu'à une génération spécifiée.
Méthode publiqueMembre statiqueCollect(Int32, GCCollectionMode)Force un garbage collection de la génération zéro jusqu'à une génération spécifiée, à une heure indiquée par une valeur GCCollectionMode.
Méthode publiqueMembre statiqueCollectionCountRetourne le nombre de fois que le garbage collection est survenu pour la génération d'objets spécifiée.
Méthode publiqueMembre statiqueGetGeneration(Object)Retourne le numéro de la génération actuelle de l'objet spécifié.
Méthode publiqueMembre statiqueGetGeneration(WeakReference)Retourne le numéro de la génération actuelle de la cible d'une référence faible spécifiée.
Méthode publiqueMembre statiquePris en charge par XNA FrameworkGetTotalMemoryRécupère le nombre d'octets qu'il est actuellement prévu d'allouer. Un paramètre indique si cette méthode peut attendre une courte période de temps avant de retourner une réponse, pour permettre au système d'effectuer un garbage collection et de finaliser les objets.
Méthode publiqueMembre statiquePris en charge par XNA Frameworka0fwz4wc.PortableClassLibrary(fr-fr,VS.100).gifKeepAliveRéférence l'objet spécifié, ce qui le rend inéligible pour le garbage collection du début de la routine actuelle jusqu'au point où cette méthode est appelée.
Méthode publiqueMembre statiqueRegisterForFullGCNotificationSpécifie qu'une notification de garbage collection doit être émise quand les conditions sont favorables à un garbage collection complet et lorsque celui-ci est terminé.
Méthode publiqueMembre statiqueRemoveMemoryPressureInforme l'exécution que la mémoire non managée a été libérée et n'a plus besoin d'être prise en compte lors de la planification du garbage collection.
Méthode publiqueMembre statiquePris en charge par XNA Frameworka0fwz4wc.PortableClassLibrary(fr-fr,VS.100).gifReRegisterForFinalizeDemande que le système appelle le finaliseur pour l'objet spécifié, pour lequel SuppressFinalize a été précédemment appelé.
Méthode publiqueMembre statiquePris en charge par XNA Frameworka0fwz4wc.PortableClassLibrary(fr-fr,VS.100).gifSuppressFinalizeDemande que le système n'appelle pas le finaliseur pour l'objet spécifié.
Méthode publiqueMembre statiqueWaitForFullGCApproach()Retourne l'état d'une notification inscrite pour déterminer si un garbage collection complet par le Common Language Runtime est imminent.
Méthode publiqueMembre statiqueWaitForFullGCApproach(Int32)Retourne, dans le délai d'attente spécifié, l'état d'une notification inscrite pour déterminer si un garbage collection complet par le Common Language Runtime est imminent.
Méthode publiqueMembre statiqueWaitForFullGCComplete()Retourne l'état d'une notification inscrite pour déterminer si un garbage collection complet par le Common Language Runtime est terminé.
Méthode publiqueMembre statiqueWaitForFullGCComplete(Int32)Retourne, dans le délai d'attente spécifié, l'état d'une notification inscrite pour déterminer si un garbage collection complet par le Common Language Runtime est terminé.
Méthode publiqueMembre statiquePris en charge par XNA FrameworkWaitForPendingFinalizersSuspend le thread en cours jusqu'à ce que le thread traitant la file d'attente des finaliseurs ait vidé cette file d'attente.
Début

Les méthodes dans cette classe influencent le moment où un garbage collection est effectué sur un objet et les ressources allouées par un objet sont libérées. Les propriétés dans cette classe fournissent des informations sur la quantité totale de mémoire disponible dans le système et catégorie d'âge, ou génération, de mémoire allouée à un objet.

Le garbage collector effectue le suivi des objets alloués dans la mémoire managée et les récupère. Le garbage collector exécute régulièrement des garbage collections pour récupérer la mémoire allouée aux objets qui ne possèdent pas de références valides. Le garbage collection est exécuté automatiquement lorsqu'une demande de mémoire ne peut pas être satisfaite en utilisant la mémoire libre de disponible. Une application peut également forcer un garbage collection à l'aide de la méthode Collect.

Un garbage collection comprend les étapes suivantes :

  1. Le garbage collector recherche les objets managés qui sont référencés dans du code managé.

  2. Le garbage collector essaie de finaliser les objets qui ne sont pas référencés.

  3. Le garbage collector libère les objets qui ne sont pas référencés et récupère leur mémoire.

Au cours d'un garbage collection, le garbage collector ne libère pas un objet s'il trouve une ou plusieurs références à cet objet dans du code managé. Cependant, le garbage collector ne reconnaît pas les références à un objet à partir de code non managé et peut libérer des objets qui sont utilisés exclusivement dans du code non managé, à moins qu'il ne soit explicitement empêché de procéder ainsi. La méthode KeepAlive fournit un mécanisme qui empêche le garbage collector de collecter des objets qui sont utilisés dans du code non managé.

Outre les allocations de mémoire managée, les implémentations du garbage collector ne conservent pas d'informations sur les ressources détenues par un objet, telles que les handles de fichiers ou les connexions à des bases de données. Lorsqu'un type utilise des ressources non managées qui doivent être libérées avant que des instances du type ne soient récupérées, le type peut implémenter un finaliseur.

Dans la plupart des cas, les finaliseurs sont implémentés en substituant la méthode Object.Finalize ; cependant, les types écrits en C# ou en C++ implémentent des destructeurs que les compilateurs transforment en une substitution de Object.Finalize. Dans la plupart des cas, si un objet a un finaliseur, le garbage collector l'appelle avant de libérer l'objet. Toutefois, le garbage collector n'est pas indispensable pour appeler des finaliseurs dans toutes les situations ; par exemple, la méthode SuppressFinalize empêche explicitement un finaliseur d'être appelé. Par ailleurs, le garbage collector n'utilise pas nécessairement un thread spécifique pour finaliser les objets et ne garantit pas l'ordre dans lequel les finaliseurs sont appelés pour les objets qui se référencent mutuellement, mais qui sont toutefois disponibles pour un garbage collection.

Dans les scénarios où les ressources doivent être libérées à un instant précis, les classes peuvent implémenter l'interface IDisposable qui contient la méthode IDisposable.Dispose qui exécute la gestion des ressources et les tâches de nettoyage. Les classes qui implémentent Dispose doivent spécifier, dans le cadre de leur contrat, si et à quel moment les consommateurs de classe appellent la méthode pour nettoyer l'objet. Par défaut, le garbage collector n'appelle pas la méthode Dispose ; cependant, les implémentations de la méthode Dispose peuvent appeler des méthodes dans la classe GC pour personnaliser le comportement de finalisation du garbage collector.

Il est recommandé, sans toutefois être obligatoire, que les garbage collectors prennent en charge le vieillissement des objets utilisant des générations. Une génération est une unité de mesure de l'âge relatif des objets en mémoire. Le numéro de la génération, ou âge, d'un objet indique la génération à laquelle un objet appartient. Les objets créés récemment font partie des nouvelles générations et possèdent des numéros de génération inférieurs à ceux des objets créés plus tôt dans le cycle de vie de l'application. Les objets dans la génération la plus récente appartiennent à la génération zéro.

Remarques à l'attention des implémenteurs

Cette implémentation du garbage collector prend en charge trois générations d'objets.

MaxGeneration est utilisé pour déterminer le nombre maximal de générations pris en charge par le système. Le vieillissement des objets permet aux applications de cibler le garbage collection sur un ensemble spécifique de générations au lieu de demander au garbage collector d'évaluer toutes les générations.

L'exemple suivant utilise plusieurs méthodes GC pour obtenir des informations sur la génération et la mémoire d'un bloc d'objets inutilisés, et les imprimer à la console. Les objets inutilisés sont ensuite rassemblés et les totaux de mémoire résultants sont affichés.


using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
	    // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number 
	    // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
		// with unused objects.
                vt = new Version();
            }
        }
    }
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Pris en charge dans :

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Afficher: