J'essaie de réduire la quantité de mémoire utilisée par mon application. Dans mon application, j'utilise System.Reflection.Emit.EnumBuilder pour créer des énumérations à la volée à partir des informations que je reçois à l'exécution. Je n'utilise qu'EnumBuilder pour créer une énumération individuelle, et après cela je n'ai plus besoin de l'utiliser. En utilisant CLRProfiler, j'ai remarqué que les EnumBuilders ne sont jamais détruits. Mon application peut faire des milliers d'énumérations en cours d'exécution, de sorte que la quantité de mémoire utilisée par ces EnumBuilders peut s'additionner. EnumBuilder ne définit pas de méthode Dispose, donc je ne peux pas le détruire de cette façon. Est-il possible de supprimer en quelque sorte les restes EnumBuilders de la mémoire?Détruire l'EnumBuilder après avoir créé une énumération?
Répondre
J'ai remarqué la même chose. C'est une 'fuite' dans ModuleBuilder qui s'accroche aux octets et aux chaînes IIRC.
Vous pouvez jeter un oeil dans WinDbg avec SOS chargé pour de meilleures informations de mémoire.
EnumBuilder
crée l'énumération dans un assemblage dynamique. Selon How to: Load and Unload Assemblies (Guide de programmation C#), il est impossible de décharger un assembly sans décharger tous les domaines d'application qui l'utilisent. En particulier:
"Même si l'assemblage est hors de portée, le fichier d'assemblage réel restera chargé jusqu'à ce que tous les domaines d'application qui le contiennent soient déchargés."
Mon application peut faire des milliers de énumérations en cours d'exécution,
Pourquoi? On dirait que vous faites quelque chose que vous ne devriez probablement pas faire.
- 1. Avoir une action retardée après avoir cliqué sur un formulaire
- 2. Vraiment détruire une session PHP?
- 3. Détruire Windows dans GTK #
- 4. Comment utiliser? caractère dans une énumération
- 5. Remplacement d'une énumération qui nécessite une traduction et un énumération
- 6. détruire array()
- 7. Comment lire une réponse WebClient après avoir publié des données?
- 8. Liaison DropDownList à une énumération
- 9. détruire une fenêtre Toplevel tk en python
- 10. Comment nettoyer après avoir utilisé le dojo?
- 11. Violation d'accès après avoir intercepté l'exception dll
- 12. MPMediaPickerController - désélection après avoir sélectionné par erreur
- 13. rediriger .htaccess après avoir remplacé un mot?
- 14. luaopen_my_example indéfini après avoir compilé swig wrapper
- 15. JQuery: Ouvrir le menu après avoir oscillé
- 16. après avoir lu simplement Rails 2
- 17. presentModalViewController: animé: crash après avoir rejeté
- 18. Est-il possible d'éditer un document Here après l'avoir créé?
- 19. Mon fil ne semble pas avoir été créé ... une idée pourquoi?
- 20. Détruire les associations après la dernière has_many: à travers l'enregistrement est supprimé
- 21. Comment utiliser une colonne de hachage calculée après avoir indexé un champ varchar (max)?
- 22. Détruire la session $ _SERVER?
- 23. Scala énumération et réflexion
- 24. Énumération Java extensible
- 25. Énumération MidpointRounding
- 26. L'interface utilisateur ne répond toujours pas après avoir utilisé control.begininvoke
- 27. acts_as_tree ne pas détruire les enfants
- 28. Générer une énumération aléatoire en C# 2.0
- 29. Comment éviter les doublons dans une énumération?
- 30. Nombre total d'éléments définis dans une énumération