Попался код который делает по многу MyFunc<T> myFunc = Expression.Lambda(typeof(Func...).Compile()
А я не знаю хорошо так делать или нехорошо
я имею ввиду память оно в IL компилит или сразу в Native-Код.
И как его GC может чистить если это КОД...
Здравствуйте, VladCore, Вы писали:
VC>Попался код который делает по многу MyFunc<T> myFunc = Expression.Lambda(typeof(Func...).Compile()
VC>А я не знаю хорошо так делать или нехорошо я имею ввиду память оно в IL компилит или сразу в Native-Код.
Конечно в IL. Откуда .NET библиотека вообще знает про натив?
VC>И как его GC может чистить если это КОД...
При компиляции создается "динамическая сборка", которая выгружается полностью.
Подробнее тут
https://msdn.microsoft.com/en-us/library/dd554932.aspx
Здравствуйте, VladCore, Вы писали:
VC>И как его GC может чистить если это КОД...
Это реализовано через
DynamicMethod:
Defines and represents a dynamic method that can be compiled, executed, and discarded. Discarded methods are available for garbage collection.
Результат jit-компиляции DynamicMethod размещается в динамически выделяемой памяти, которая подлежит освобождению, когда этот код завершил исполнение, и не осталось ссылок на делегат. Это, конечно, отличается от обычной сборки мусора, и реализовано специальным образом.