Partager via


Comment : décharger un domaine d'application

Lorsque vous avez fini d'utiliser un domaine d'application, déchargez-le à l'aide de la méthode System.AppDomain.Unload. La méthode Unload arrête gracieusement le domaine d'application spécifié. Lors du processus de déchargement, aucun nouveau thread ne peut accéder au domaine d'application et toutes les structures de données spécifiques aux domaines d'application sont libérées.

Les assemblys chargés dans le domaine d'application sont supprimés et ne sont plus disponibles. Si un assembly du domaine d'application est indépendant du domaine, les données de l'assembly restent en mémoire jusqu'à l'arrêt de l'ensemble du processus. Il n'existe pas d'autre mécanisme de déchargement d'un assembly indépendant du domaine que l'arrêt de l'ensemble du processus. Dans certaines situations, la requête de déchargement d'un domaine d'application ne fonctionne pas et entraîne une CannotUnloadAppDomainException.

L'exemple suivant crée un domaine d'application appelé MyDomain, imprime certaines informations dans la console, puis décharge le domaine d'application. Notez que le code tente ensuite d'imprimer le nom convivial du domaine d'application déchargé dans la console. Cette action génère une exception qui est gérée par les instructions try/catch à la fin du programme.

Exemple

Imports System
Imports System.Reflection

Class AppDomain2
    Public Shared Sub Main()
        Console.WriteLine("Creating new AppDomain.")
        Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing)

        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
        Console.WriteLine("child domain: " + domain.FriendlyName)
        AppDomain.Unload(domain)
        Try
            Console.WriteLine()
            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
            ' The following statement creates an exception because the domain no longer exists.
            Console.WriteLine("child domain: " + domain.FriendlyName)
        Catch e As AppDomainUnloadedException
            Console.WriteLine(e.GetType().FullName)
            Console.WriteLine("The appdomain MyDomain does not exist.")
        End Try
    End Sub
End Class
using System;
using System.Reflection;

class AppDomain2
{
    public static void Main()
    {
        Console.WriteLine("Creating new AppDomain.");
        AppDomain domain = AppDomain.CreateDomain("MyDomain", null);

        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + domain.FriendlyName);
        AppDomain.Unload(domain);
        try
        {
            Console.WriteLine();
            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
            // The following statement creates an exception because the domain no longer exists.
            Console.WriteLine("child domain: " + domain.FriendlyName);
        }
        catch (AppDomainUnloadedException e)
        {
            Console.WriteLine(e.GetType().FullName);
            Console.WriteLine("The appdomain MyDomain does not exist.");
        }
    }
}
using namespace System;
using namespace System::Reflection;

ref class AppDomain2
{
public:
    static void Main()
    {
        Console::WriteLine("Creating new AppDomain.");
        AppDomain^ domain = AppDomain::CreateDomain("MyDomain", nullptr);

        Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
        Console::WriteLine("child domain: " + domain->FriendlyName);
        AppDomain::Unload(domain);
        try
        {
            Console::WriteLine();
            Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
            // The following statement creates an exception because the domain no longer exists.
            Console::WriteLine("child domain: " + domain->FriendlyName);
        }
        catch (AppDomainUnloadedException^ e)
        {
            Console::WriteLine(e->GetType()->FullName);
            Console::WriteLine("The appdomain MyDomain does not exist.");
        }
    }
};

int main()
{
    AppDomain2::Main();
}

Voir aussi

Tâches

Comment : créer un domaine d'application

Concepts

Programmation avec des domaines d'application

Autres ressources

Utilisation des domaines d'application