GC in .net framework
A..ctor
Entering A.DoSomething
Handle valid: True
Exiting A.DoSomething
A..Finalize
что я не так сделал?
Хотя сразу и неочевидно, пожалуй.
2Гадфазер: вообще-то нихуя не логично. Я, как программер на шарпе, вовсе не должен задумываться о виде мсил-кода вызова функции. Я вообще о мсиле знать не должен.
Я вижу выражение - zzz.Zzz(this.zzz); в этом выражении используется this.
Но что меня больше всего убивает - люди из M$ нихуя не спешат поделиться с окружающими радостными новостями о поведении своей поебени в нетривиальных случаях. Мы щаз изучаем поведение этой поебени - пиздец! Она так себя ведёт не на всех машинах!
Тогда в EnvironmentEmulator
class GoodHandle
{
private Object owner;
public int handle;
public GoodHandle(Object owner, int handle)
{
this.owner = owner;
this.handle = handler;
}
~GoodHandle
{
...
}
}
public static bool OperateOnHandle(GoodHandle handle)
{
GC.Collect; // It can happen any time, for example here.
bool r = openHandles.ContainsKey(handle.handle);
GC.KeepAlive(handle);
return r;
}
В этом случае VB прогеру, который будет писать класс A, не нужно будет задумываться о таких проблемах. Хотя неверно есть и более простые решения.
Но что меня больше всего убивает - люди из M$ нихуя не спешат поделиться с окружающими радостными новостями о поведении своей поебени в нетривиальных случаяхПочитай блоги Сриса Брумми, станенет понятно, что не все чем с тобой могут поделится, может воспринять средне-статистический прогер. После первого прочтения хорошо если 50% понятно будет
> Я вообще о мсиле знать не должен.
А я о нём и не задумывался, говорю из общих соображений.
Привязка внешнего ресурса к значению в памяти - похоже, плохая идея.
Как и вообще файналайзеры, которые не вкладываются в концепцию сборки мусора.
Думал полчаса, и решил, что для управления внешними ресурсами нужны специальные средства,
с поддержкой на уровне языка, если хочется одновременно удобства и корректности.
В С# и в VB2005 для этого есть конструкция using, которая сильно помогает.
А что это? Я что-то не смог найти объяснения.
{
...
}
Resource должен держать IDisposable, в конце блока гарантированно вызвается Dispose.
Что самое забавное - на самом деле ресурс вовсе не обязательно создавать именно там где я написал. То есть валидна и такая схема:
Resource resource = new Resource
...
using (resource){}
Вот =)
Я-то надеялся что-то крутое увидеть
Но что меня больше всего убивает - люди из M$ нихуя не спешат поделиться с окружающими радостными новостями о поведении своей поебени в нетривиальных случаях. Мы щаз изучаем поведение этой поебени - пиздец! Она так себя ведёт не на всех машинах!Странно... лично я слышал о таком поведении от Д. Бокса на майкрософтовской конфе года три назад...
SafeHandle: A Reliability Case Study [Brian Grunkemeyer]
Там описывается эта ситуация, и одна еще хуже, будет ссылка на еще один интересный пост.
Оставить комментарий
bleyman
Тут кто-то удивлялся забавственному поведению жавовского коллектора? Ловите бля. Я в ахуе.