2012-05-04 2 views
2

Представьте, что вы пишете библиотеку. Скажем, эта библиотека будет использоваться в серверном приложении 24/7. Есть некоторые неуправляемые ресурсы, завернутые в ваш общедоступный API, поэтому вы реализуете одноразовый шаблон (вы даже можете реализовать финализаторы)Одноразовые ресурсы в библиотечном коде

Обычно вы должны использовать оператор using, чтобы освободить неуправляемые ресурсы. Но вы пишете только библиотеку, а не последнее приложение. Что, если другой программист «забыл» позвонить Dispose()? Вы получите утечку ресурсов в своей библиотеке! Мы могли положиться на финализаторы, но нет никакой гарантии, что финализатор когда-либо был бы called. Итак, есть ли способ гарантировать, что каким-то образом неуправляемые ресурсы будут освобождены? Есть идеи?

ответ

2

Нет решения, кроме документирования ваших классов. Напишите в своей документации, как ваши классы должны использоваться (т. Е. Они должны быть удалены как можно скорее, возможно с using или с явным вызовом Dispose).

Вы не более ответственны за утечку памяти, если ваш потребитель неправильно распоряжается своим объектом, чем промышленные предприятия несут ответственность за загрязнение, если люди мусорят их мусор в дикой природе.

+0

Thx для ответа. хорошая метафора! – undefined

1

Вы можете надеяться, что серверное приложение имеет правило анализа кода CA2213: Disposable fields should be disposed.

В противном случае я не знаю, есть ли способ гарантировать, что они вызовут ваш метод Dispose().

+0

Этот вид может помочь. Правила статического анализа :) Но я думал о программируемом решении этой проблемы. – undefined

Смежные вопросы