Re[4]: Как узнать кто ссылается на объект?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 08.06.07 06:36
Оценка: 6 (2)
Здравствуйте, S., Вы писали:

S.>Я тут заметил что сборщик мусора ведет себя по разному

S.>в зависимости от того как я запускаю приложение.

так оно и есть:

Когда JIT-компилятор компилирует IL-код метода в машинный код, он проверяет, была ли сборка, в которой определен метод, скомпилирована без оптимизаций и выполняется ли процесс с отладчиком. Если и то и другое верно, JIT-компилятор генерирует внутреннюю таблицу корней метода так, чтобы искусственно продлить время жизни всех переменных до завершения метода.
...
При компиляции метода JIT-компилятор смотрит, чтобы сборка, определяющая метод, содержала атрибут SystemJDiagnosticsDebuggableAttribute, а аргумент isJITOptimizerDisabled его конструктора был равен true. Если JIT-компилятор обнаружит, что этот атрибут задан, он также скомпилирует метод, искусственно продлевая время жизни всех переменных до окончания метода. При указании параметра компилятора /debug+ компилятор С# добавляет этот атрибут в готовую сборку. Учтите, что параметр /optimize+ компилятора С# может вновь включить оптимизацию, поэтому при выполнении такого эксперимента этот параметр компилятора указывать не следует. Таким образом, JIT-компилятор помогает своевременно выполнить отладку.


(c)Jeffrey Richter CLR via C# стр.455

з.ы. может кроме продления жизни переменных он и еще чего делает в debug-е
... << RSDN@Home 1.2.0 alpha rev. 688>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.