Что можно вызвать из Finalizer?
От: Ed.ward Россия  
Дата: 07.12.06 09:07
Оценка:
Добрый день, господа.

Такой вот вопрос, есть ли хоть что-то, что можно гарантировано безопасно вызвать из finalizer?

Конкретно меня интересует безопасно ли вызывать Debug.WriteLine, или он тоже может быть уже мертвеньким?

Спасибо

Ed.ward
Re: Что можно вызвать из Finalizer?
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 07.12.06 09:14
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Добрый день, господа.


EW>Такой вот вопрос, есть ли хоть что-то, что можно гарантировано безопасно вызвать из finalizer?


EW>Конкретно меня интересует безопасно ли вызывать Debug.WriteLine, или он тоже может быть уже мертвеньким?


ИМХО, если финализатор вызывается не по причине выгрузки домена, то Debug.WriteLine должен быть жив, иначе возможно уже мертв.

EW>Спасибо


EW>Ed.ward
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Что можно вызвать из Finalizer?
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 07.12.06 09:16
Оценка: 4 (1)
Здравствуйте, pt4h, Вы писали:

P>ИМХО, если финализатор вызывается не по причине выгрузки домена, то Debug.WriteLine должен быть жив, иначе возможно уже мертв.


Чтобы выяснить в результате чего вызван финализатор воспользуйтесь

AppDomain.IsFinalizingForUnload()
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Что можно вызвать из Finalizer?
От: Ed.ward Россия  
Дата: 07.12.06 09:39
Оценка:
Здравствуйте, pt4h, Вы писали:

P>Здравствуйте, pt4h, Вы писали:


P>>ИМХО, если финализатор вызывается не по причине выгрузки домена, то Debug.WriteLine должен быть жив, иначе возможно уже мертв.


Да, меня интересовало иммено при умирании CLR


P>Чтобы выяснить в результате чего вызван финализатор воспользуйтесь


P>
P>AppDomain.IsFinalizingForUnload()
P>


Спасибо, заодно там написано что можно безопасно пользовать Console класс.
Но вот, что будет если я перенаправлю Console.Out в некий свой объект я, честно говоря, не понял.

Может у тебя tcnm ссылка где почитать про умирание CLR поподробней? Там вроде еще гарантируется что статики из mscorlib умирают поcледними....

Ed.ward
Re[4]: Что можно вызвать из Finalizer?
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 07.12.06 09:54
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, pt4h, Вы писали:


P>>Здравствуйте, pt4h, Вы писали:


P>>>ИМХО, если финализатор вызывается не по причине выгрузки домена, то Debug.WriteLine должен быть жив, иначе возможно уже мертв.


EW>Да, меня интересовало иммено при умирании CLR



P>>Чтобы выяснить в результате чего вызван финализатор воспользуйтесь


P>>
P>>AppDomain.IsFinalizingForUnload()
P>>


EW>Спасибо, заодно там написано что можно безопасно пользовать Console класс.

EW>Но вот, что будет если я перенаправлю Console.Out в некий свой объект я, честно говоря, не понял.

Еще вспомнил, что в финализаторе необходимо проверять на Environment.HasShutdownStarted — при выгрузке CLR.

EW>Может у тебя tcnm ссылка где почитать про умирание CLR поподробней? Там вроде еще гарантируется что статики из mscorlib умирают поcледними....


mscorlib единственная сборка, которая по умолчанию грузится как domain-neutral. domain-neutral сборки выгружаются только вместе с CLR, а значит и их статики будут жить до последнего. Можно провести эксперимент, загрузив свою сборку как нейтральную через пометку ентри поинта как [LoaderOptimization(LoaderOptimization.MultiDomain)]

class LoaderTest

{
    [LoaderOptimization(LoaderOptimization.MultiDomain)]
    static int Main(string[] args)
    {
        /* ... */
        return 0;
    }
}


К сожалению нет. Об этом я читал в CLR via C# 2nd Eddition by Jeffry Richter. В электронном варианте я кк сожалению ее не видел .

EW>Ed.ward
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.