Nous utilisons une classe RuntimeDataBuilder personnalisée qui construit dynamiquement un type de mémoire .NET en utilisant Reflection.Emit pour créer des getters/setters de propriété simples pour les informations que nous recevons d'un DataService WCF générique. Le service expose une structure "DataSet like" constituée de 1..m DataTableDefinitions contenant chacune 1..m DataTableColumnDefinitions. Lorsque l'information est reçue côté client, nous générons le type avec ses setters/getters de propriété pour améliorer les performances et faciliter la liaison sur notre client Silverlight. Tout cela fonctionne bien.MSIL Memory Leaks
Ma question est liée à la fuite de mémoire possible associée à la régénération du type. De temps en temps, l'utilisateur peut modifier les paramètres de la requête, ce qui peut entraîner plus ou moins d'informations sur le réseau. Il invalide donc le type précédent que nous avons créé et je veux m'assurer que nous sommes capables de libérer la mémoire utilisée par cette définition de type précédente. De this article on MSDN Je comprends que si vous utilisez la génération de code léger (LCG) le code est alloué sur le tas géré qui sera récupéré par le GC quand il n'y a rien qui contient une référence à celui-ci. Mais LCG ne semble s'appliquer qu'aux méthodes dynamiques. Mon souci est pour le Type avec tous ses getters/setters de propriété qui n'est plus maintenant requis. Si cela est alloué sur le tas non géré, notre seul espoir de récupérer la mémoire semble être de s'assurer que le type est chargé dans un AppDomain temporaire que nous pouvons décharger quand il n'est plus nécessaire. Est-ce que quelqu'un peut confirmer ou mettre en évidence une autre façon de récupérer la mémoire?
Thx
L'ExpandoObject est certainement une option mais comme vous l'avez mentionné, elle n'est pas supportée par SL4. Merci pour la confirmation. – Carel