Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe GC

Controlla il Garbage Collector di sistema, un servizio che recupera automaticamente la memoria non utilizzata.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public static class GC

Il tipo GC espone i seguenti membri.

  NomeDescrizione
Proprietà pubblicaMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreMaxGenerationOttiene il numero massimo di generazioni supportate correntemente dal sistema.
In alto

  NomeDescrizione
Metodo pubblicoMembro staticoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreAddMemoryPressureInforma il runtime di un'allocazione di una grande quantità di memoria non gestita di cui tenere conto durante la pianificazione della procedura di Garbage Collection.
Metodo pubblicoMembro staticoCancelFullGCNotificationAnnulla la registrazione di una notifica di un'operazione di Garbage Collection.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCollect()Forza un immediato Garbage Collection di tutte le generazioni.
Metodo pubblicoMembro staticoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCollect(Int32)Forza un immediato Garbage Collection a partire dalla generazione 0 fino a una determinata generazione.
Metodo pubblicoMembro staticoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCollect(Int32, GCCollectionMode)Forza un Garbage Collection dalla generazione 0 a una generazione specificata, in un momento specificato da un valore di GCCollectionMode.
Metodo pubblicoMembro staticoSupportato in .NET per applicazioni Windows StoreCollect(Int32, GCCollectionMode, Boolean)Forza un Garbage Collection dalla generazione 0 fino a una determinata generazione, in un momento specificato da un valore di GCCollectionMode, con un valore che specifica se la raccolta deve causare un blocco.
Metodo pubblicoMembro staticoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCollectionCountRestituisce il numero di volte che è stata effettuata la procedura di Garbage Collection per la generazione specificata di oggetti.
Metodo pubblicoMembro staticoGetGeneration(Object)Restituisce il numero corrente di generazione dell'oggetto specificato.
Metodo pubblicoMembro staticoGetGeneration(WeakReference)Restituisce il numero corrente di generazione della destinazione di uno specifico riferimento debole.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetTotalMemoryRecupera il numero di byte correntemente considerati allocabili. Un parametro indica se questo metodo può attendere un breve intervallo prima di restituire un risultato per consentire l'esecuzione della procedura di Garbage Collection e la finalizzazione degli oggetti.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreKeepAliveFa riferimento all'oggetto specificato, rendendolo inadatto per il Garbage Collection dall'inizio della routine corrente fino al momento in cui viene chiamato il metodo.
Metodo pubblicoMembro staticoRegisterForFullGCNotificationSpecifica che deve essere generata una notifica di un'operazione di Garbage Collection quando le condizioni favoriscono l'operazione di Garbage Collection completa e quando la raccolta è stata completata.
Metodo pubblicoMembro staticoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreRemoveMemoryPressureInforma il runtime che è stata rilasciata memoria non gestita di cui non occorre più tenere conto durante la pianificazione della procedura di Garbage Collection.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreReRegisterForFinalizeRichiede che il sistema chiami il finalizzatore per l'oggetto specificato, per il quale è stato precedentemente chiamato il metodo SuppressFinalize.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreSuppressFinalizeRichiede che il finalizzatore non venga chiamato da Common Language Runtime per l'oggetto specificato.
Metodo pubblicoMembro staticoWaitForFullGCApproach()Restituisce lo stato di una notifica registrata per determinare se una procedura completa di Garbage Collection bloccante tramite Common Language Runtime sia imminente.
Metodo pubblicoMembro staticoWaitForFullGCApproach(Int32)Restituisce, in un periodo di timeout specificato, lo stato di una notifica registrata per determinare se una procedura completa di Garbage Collection bloccante tramite Common Language Runtime sia imminente.
Metodo pubblicoMembro staticoWaitForFullGCComplete()Restituisce lo stato di una notifica registrata per determinare se una procedura completa di Garbage Collection bloccante è stata portata a termine da Common Language Runtime.
Metodo pubblicoMembro staticoWaitForFullGCComplete(Int32)Restituisce, in un periodo di timeout specificato, lo stato di una notifica registrata per determinare se una procedura completa di Garbage Collection bloccante tramite Common Language Runtime sia stata completata.
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreWaitForPendingFinalizersSospende il thread corrente fino a quando la coda di finalizzatori non sarà stata svuotata dal thread che la elabora.
In alto

I metodi di questa classe influiscono quando su un oggetto viene eseguito un Garbage Collection e quando le risorse allocate da un oggetto vengono rilasciate. Le proprietà della classe forniscono informazioni sulla quantità totale di memoria disponibile nel sistema e la categoria di durata, o generazione, della memoria allocata a un oggetto.

Il Garbage Collector controlla e recupera gli oggetti allocati nella memoria gestita. Viene eseguita periodicamente la procedura di Garbage Collection per recuperare la memoria allocata a oggetti per i quali non sono presenti riferimenti validi. La procedura di Garbage Collection avviene automaticamente qualora non sia possibile soddisfare una richiesta di memoria utilizzando la memoria libera disponibile. In alternativa è possibile che un'applicazione forzi la procedura di Garbage Collection utilizzando il metodo Collect.

La procedura di Garbage Collection consiste nelle seguenti operazioni:

  1. Il Garbage Collector ricerca gli oggetti gestiti a cui viene fatto riferimento nel codice gestito.

  2. Il Garbage Collector cerca di finalizzare gli oggetti per i quali non sono presenti riferimenti.

  3. Il Garbage Collector libera gli oggetti per i quali non sono presenti riferimenti e ne recupera la memoria.

Durante l'operazione il Garbage Collector non libera un oggetto se rileva uno o più riferimenti a tale oggetto nel codice gestito. Il Garbage Collector non riconosce tuttavia i riferimenti a un oggetto da codice non gestito. È quindi possibile che vengano liberati oggetti utilizzati in modo esclusivo nel codice non gestito, a meno che questa operazione non sia espressamente impedita. Tramite il metodo KeepAlive viene fornito un meccanismo che impedisce al Garbage Collector di raccogliere oggetti utilizzati nel codice non gestito.

A parte le allocazioni della memoria gestita, le implementazioni del Garbage Collector non mantengono le informazioni sulle risorse utilizzate da un oggetto, come gli handle di file o le connessioni di database. Quando un tipo utilizza le risorse non gestite che devono essere rilasciate prima del recupero delle istanze del tipo, il tipo può implementare un finalizzatore.

Nella maggior parte dei casi i finalizzatori vengono implementati eseguendo l'override del metodo Object.Finalize. I tipi scritti in C# o C++ implementano tuttavia distruttori, che vengono convertiti dai compilatori in un'override di Object.Finalize. Nella maggior parte dei casi se un oggetto dispone di un finalizzatore, questo viene chiamato dal Garbage Collector prima di liberare l'oggetto. Tuttavia, non è necessario che i finalizzatori vengano chiamati dal Garbage Collector in tutte le situazioni. Il metodo SuppressFinalize ad esempio impedisce esplicitamente la chiamata a un finalizzatore. Non è inoltre necessario che il Garbage Collector utilizzi sempre uno specifico thread per finalizzare gli oggetti oppure che garantisca l'ordine in cui saranno chiamati i finalizzatori per gli oggetti che fanno riferimento reciproco, ma che sono comunque disponibili per la procedura di Garbage Collection.

In situazioni in cui le risorse devono essere rilasciate in un momento specifico, le classi possono implementare l'interfaccia IDisposable, nella quale è incluso il metodo IDisposable.Dispose che esegue la gestione delle risorse e le attività di pulizia. Le classi che implementano Dispose devono specificare, come previsto dal contratto della classe, se e quando i consumer della classe chiamano il metodo per pulire l'oggetto. Per impostazione predefinita, il Garbage Collector non chiama il metodo Dispose. Le implementazioni del metodo Dispose possono tuttavia chiamare i metodi nella classe GC per personalizzare il comportamento di finalizzazione del Garbage Collector.

È consigliabile, ma non obbligatorio, che i Garbage Collector supportino la durata degli oggetti utilizzando le generazioni. Una generazione è un'unità di misura della durata relativa degli oggetti in memoria. Il numero di generazione, o durata, di un oggetto indica la generazione alla quale appartiene l'oggetto. Gli oggetti creati per ultimi fanno parte delle generazioni più recenti e dispongono numeri di generazione inferiori rispetto agli oggetti creati in precedenza nel ciclo di vita dell'applicazione. Gli oggetti creati nella generazione più recente appartengono alla generazione 0.

Note per gli implementatori

Questa implementazione del Garbage Collector supporta tre generazioni di oggetti.

MaxGeneration consente di determinare il numero massimo di generazione supportato dal sistema. La durata dell'oggetto consente alle applicazioni di impostare la procedura di Garbage Collection in modo che valuti solo un gruppo specifico di generazioni piuttosto che tutte.

Nell'esempio riportato di seguito vengono utilizzati diversi metodi GC per ottenere informazioni sulla generazione e sulla memoria di un blocco di oggetti inutilizzati e per stampare queste informazioni nella console. Gli oggetti inutilizzati vengono quindi raccolti e, successivamente, vengono visualizzati i totali della memoria.


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

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft