OVH Cloud OVH Cloud

Chargement / Déchargement des DLL

1 réponse
Avatar
Grégory Davin
Bonjour,

Je travaille sur le dév de soft pour Pocket PC.
Je suis en train de regarder le fonctionnement des DLL.

Aucun problème pour le chargement, c'est un vrai bonheur : ajout de la
référence et une ligne de code !

Par contre ma DLL reste chargé en mémoire une fois que j'ai fermé ma
fenêtre. Je voudrais libérer la mémoire. Comment puis-je faire ?

Mon code :

private void button1_Click(object sender, System.EventArgs e) {
DLL_WinCE.FrmDLL MyForm = new DLL_WinCE.FrmDLL();
MyForm.Show();
}

Dans le Closed de la fiche je fais un Dispose() de celle-ci. (Est-ce
bien ou pas bien, merci de me dire).

Sur un autre bouton, je voudrais télécharger via un WebService une maj
éventuelle de ma DLL et donc remplacer l'existante.

Quand j'ai téléchargé ma nouvelle DLL et que je veux donc supprimer
l'ancienne, j'ai une exception IOException comme quoi ma DLL est
occupée :Z.

Par sécurité, je lance un GC.Collect() avant l'appel du WebService, me
disant qu'il va peut-être libérer ma DLL mais non :(

Le plus bizarre, c'est que depuis l'explorateur, je suis capable de la
supprimer. Par contre même en la remplacant par la nouvelle, il doit me
garder une référence quelque part dans sa mémoire, car il me relance
toujours la 1°.

Ou est-ce que je pêche ?
Merci

--
Greg

A quoi sert de réussir sa vie ? Ce qu'il faudrait, c'est rater sa mort.

Jean Yanne

1 réponse

Avatar
Eric Vernié [MS]
Bonjour Gregory ,

la seul possibilité de décharger une DLL en mémoire avec .NET, c'est de
décharger le domaine dans lequel elle a été chargée.
Je m'explique. Lorsque ton application se lance, un domaine par défaut est
crée et seul lorsque ce domaine est déchargé (donc lorsque l'application est
arrêtée) , les DLLs (Assemblies) sont déchargées.
Si tu souhaites décharger des DLLs il te faut donc les charger dans un autre
Domaine que celui par défaut.

Un bout d'exemple ici.
How to: Load and Unload Assemblies (C# Programming Guide)
http://msdn2.microsoft.com/en-us/library/ms173101.aspx

Cordialement

Eric Vernié
Microsoft France

PS:
Ca marche avec le Framework .NET, il te faut donc essayer avec le Compact
Framework




"Grégory Davin" wrote in message
news:
Bonjour,

Je travaille sur le dév de soft pour Pocket PC.
Je suis en train de regarder le fonctionnement des DLL.

Aucun problème pour le chargement, c'est un vrai bonheur : ajout de la
référence et une ligne de code !

Par contre ma DLL reste chargé en mémoire une fois que j'ai fermé ma
fenêtre. Je voudrais libérer la mémoire. Comment puis-je faire ?

Mon code :

private void button1_Click(object sender, System.EventArgs e) {
DLL_WinCE.FrmDLL MyForm = new DLL_WinCE.FrmDLL();
MyForm.Show();
}

Dans le Closed de la fiche je fais un Dispose() de celle-ci. (Est-ce bien
ou pas bien, merci de me dire).

Sur un autre bouton, je voudrais télécharger via un WebService une maj
éventuelle de ma DLL et donc remplacer l'existante.

Quand j'ai téléchargé ma nouvelle DLL et que je veux donc supprimer
l'ancienne, j'ai une exception IOException comme quoi ma DLL est occupée
:Z.

Par sécurité, je lance un GC.Collect() avant l'appel du WebService, me
disant qu'il va peut-être libérer ma DLL mais non :(

Le plus bizarre, c'est que depuis l'explorateur, je suis capable de la
supprimer. Par contre même en la remplacant par la nouvelle, il doit me
garder une référence quelque part dans sa mémoire, car il me relance
toujours la 1°.

Ou est-ce que je pêche ?
Merci

--
Greg

A quoi sert de réussir sa vie ? Ce qu'il faudrait, c'est rater sa mort.

Jean Yanne