Re: Количество вызовов GC
От: eBoy  
Дата: 22.05.05 15:45
Оценка:
Здравствуйте, Name, Вы писали:

N>Ещё одно замечание.

N>Я не уверен до конца, но если компилятор окажется достаточно умным, он может удалить эти "бесцельные" создания объектов, заметив, что конструктор всё равно пустой. Бороться с этой оптимизацией можно несколькими способами. Самое очевидное — поместить ссылку на объект в локальную переменную:

N>
  GCCounter c = new GCCounter();
N>

N>Ведь эта переменная всё равно пропадёт при выходе из своей зоны видимости. Тем не менее, компилятор и эту переменную, скорее всего, удалит в целях оптимизации.
N>К счастью, именно для борьбы с оптимизацией в .NET существует специальный метод — GC.KeepAlive(). Пользоваться им в данном случае следует так:

N>
  GC.KeepAlive( new GCCounter() );

N>Этот метод ничего не делает. Смысл его заключается именно (и только) в том, чтобы "обмануть" оптимизатор: раз оптимизатор видит, что ссылка на объект передаётся в какой-то метод, он не имеет права исключить из кода создание этого объекта. Поэтому теперь наша схема должна сработать как задумано.

A ne polucitsia li tak, sto budet scetatsia toka sbor musora v pokolenii 1? Ved esli objekt perezyviot sbor musora on peremestitsia v sledujuscee pokolenie.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.