Работа с .NET IDisposable объектами - PullRequest
40 голосов
/ 01 ноября 2008

Я работаю в C #, и я довольно слабо использовал блоки using для объявления объектов, которые реализуют IDisposable, что вы, очевидно, всегда должны делать. Тем не менее, я не вижу простой способ узнать, когда я ускользнул. Visual Studio, кажется, не указывает на это каким-либо образом (я просто что-то упустил?). Должен ли я просто проверять помощь каждый раз, когда я что-либо заявляю, и постепенно создавать энциклопедическую память, для которой существуют предметы, а какие нет? Кажется ненужным, болезненным и подверженным ошибкам.

Как вы справляетесь с этим?

EDIT:

Глядя на боковую панель связанных вопросов, я обнаружил еще один вопрос , который дал понять, что Dispose() в любом случае должен вызываться финализатором объекта. Поэтому, даже если вы никогда не называете это сами, это должно произойти, то есть у вас не будет утечки памяти, если вы не используете using (что, я полагаю, меня все время волновало). Единственное предостережение в том, что сборщик мусора не знает, сколько дополнительной памяти удерживает объект как неуправляемый материал, поэтому он не будет точно представлять, сколько памяти будет освобождено при сборе объекта. Это приведет к тому, что сборщик мусора будет работать не так идеально, как обычно.

Короче говоря, это не конец света, если я пропущу using. Я просто хотел бы, чтобы что-то сгенерировало хотя бы предупреждение.

(Вне темы: почему нет специальной уценки для ссылки на другой вопрос?)

EDIT:

Хорошо, хорошо, прекрати требовать. Это супер пупер вселенный dramatic-chipmunk -уровень важно , чтобы позвонить Dispose(), или мы все умрем .

Теперь. Учитывая это, почему это так легко & mdash; черт, почему это даже разрешено & mdash; сделать это неправильно? Вы должны изо всех сил, чтобы сделать это правильно. Выполнение этого как все остальное приводит к Армагеддону (очевидно). Так много для инкапсуляции, да?

[Отвращение, отвращение]

Ответы [ 12 ]

0 голосов
/ 01 ноября 2008

Всегда старайтесь использовать блоки "using". Для большинства объектов это не имеет большого значения, однако я столкнулся с недавней проблемой, когда я реализовал элемент управления ActiveX в классе и не выполнял очистку изящно, если Dispose не был вызван правильно. Суть в том, что даже если это не имеет большого значения, попробуйте сделать это правильно, потому что через некоторое время это будет иметь значение.

0 голосов
/ 01 ноября 2008

Как и Fxcop (с которым они связаны), инструменты анализа кода в VS (если у вас есть одно из выпусков более высокого уровня) также найдут эти случаи.

...