Peut-on réduire l'ensemble de travail d'une application gérée en déchargeant des bibliothèques non gérées avec AfxFreeLibrary?

StackOverflow https://stackoverflow.com/questions/213627

  •  03-07-2019
  •  | 
  •  

Question

J'ai une application Windows gérée qui charge un composant C ++ géré qui utilise AfxLoadLibrary pour charger un composant tiers, le cas échéant, sur la machine cliente. Une fois détecté, je décharge le composant à l’aide de AfxFreeLibrary afin de réduire l’ensemble de travail de l’application parent gérée.

L'appel à AfxFreeLibrary aboutit (vérifié à l'aide de Process Explorer), mais aucune mémoire n'est libérée. Est-ce dû à la nature d'une application gérée ou existe-t-il un moyen de libérer cet espace de processus?

Je ne cherche pas de solutions alternatives pour résoudre ce problème en général, car le code est déjà en production. J'aimerais plutôt savoir si l'approche du déchargement en vaut la peine.

Était-ce utile?

La solution

Cela devrait suffire. Vous pouvez le prouver en écrivant une application native pure et en visualisant l’ensemble de travail. Toutefois, l'ensemble de travail correspond à la taille de la mémoire nécessaire à l'exécution de l'application. Par conséquent, si le code utilisé par la dll peut être échangé, l'ensemble de travail ne sera pas réduit - Windows ne le comptabilise pas comme faisant partie de l'ensemble de travail. .

Si la dll a de la mémoire privée allouée au processus, cela ne peut pas être échangé, alors cela compte et réduira l'ensemble de travail.

donc la réponse est que cela dépend. Sa ne fait pas la moindre différence, et si la dll n'est pas utilisée, elle aura été remplacée et ne fera pas partie de la liste de travail actuelle. Vous pourriez aussi bien ne pas vous préoccuper de le décharger, à moins que vous ne vouliez garder les choses en ordre.

Le seul moyen de réduire le nombre de postes de travail consiste à faire en sorte que votre application utilise moins de mémoire. En tant qu’application .NET, il est probable que vous n’ayez pas beaucoup de contrôle sur celle-ci (car le GC décidera lui-même de la quantité de mémoire «active» et nécessaire dans l’ensemble de travail).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top