Мы используем пользовательский класс RuntimeDataBuilder , который динамически создает в памяти тип .NET с помощью Reflection.Emit для создания простых методов получения / установки свойств для информации, которую мы получаем из универсального сервиса данных WCF.Служба предоставляет структуру типа DataSet, состоящую из 1..m DataTableDefinitions, каждая из которых содержит 1..m DataTableColumnDefinitions.Когда информация принимается на стороне клиента, мы генерируем тип с его установщиками / получателями свойств, чтобы повысить производительность и упростить связывание с нашим клиентом Silverlight.Все это прекрасно работает.
Мой вопрос связан с возможной утечкой памяти, связанной с восстановлением типа.Время от времени пользователь может изменять параметры запроса, что может привести к тому, что по проводам будет поступать больше / меньше информации.Поэтому он лишает законной силы предыдущий тип, который мы создали, и я хочу убедиться, что мы можем освободить память, используемую этим предыдущим определением типа.Начиная с этой статьи о MSDN я понимаю, что если вы используете генерацию облегченного кода (LCG), то код выделяется в управляемой куче, которая будет возвращена GC, когда на нее ничего не будет ссылаться.Но LCG только кажется применимым к динамическим методам.Меня беспокоит тип со всеми его методами получения / установки свойств, который больше не требуется.Если это распределяется в неуправляемой куче, наша единственная надежда на восстановление памяти, похоже, состоит в том, чтобы убедиться, что тип загружен во временный домен приложений, который мы можем выгружать, когда он больше не требуется.
Может кто-нибудь пожалуйстаподтвердите или выделите другой способ восстановления памяти.
Thx