когда и как мне позвонить в IDisposable Interface?asp.net MVC 3 - PullRequest
0 голосов
/ 30 сентября 2011

Я просто гуглил это и мог найти что-нибудь, что даст мне хороший пример того, как реализовать и каковы лучшие сценарии, когда я должен вызвать интерфейс IDisposable

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

заранее спасибо ..

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

Контроллеры, использующие EF, должны включать метод dispose

protected override void Dispose(bool disposing) 

    { 
        db.Dispose(); 
        base.Dispose(disposing); 
    }

См. Проверка того, что соединения с базой данных не оставлены открытыми

Когда вы используете скаффолдинг MVC,это создает метод утилизации для вас.См. Также Controller.Dispose (Boolean)

Платформа ASP.NET MVC вызывает Dispose, когда запрос завершил обработку.Разработчикам обычно не нужно вызывать Dispose.Если вы производите класс от Controller, а производный класс использует неуправляемую память, управляемые ресурсы операционной системы (например, файлы) или COM-объекты, вам следует реализовать Dispose для очистки этих ресурсов.Вам также следует вызвать метод Dispose базового класса.Метод Dispose оставляет экземпляр Controller в непригодном для использования состоянии.После вызова Dispose вы должны освободить все ссылки на экземпляр Controller, чтобы сборщик мусора мог восстановить память, которую занимал экземпляр Controller.

Для получения дополнительной информации см. Очистка неуправляемых ресурсов и Реализация метода Dispose.

1 голос
/ 30 сентября 2011

Поскольку вы пометили MVC, я отвечу специально для контроллеров mvc.Если вы не используете какие-либо ресурсы, которые нужно утилизировать (т. Е. Ресурсы, которые поддерживают метод Dispose, а вы не утилизируете, то уже в методе кода), тогда вам следует реализовать IDisposable и вызывать dispose в своих объектах.Это довольно редко, хотя вам нужно это делать, и, как правило, вы увидите это, если используете в вашем контроллере класс сущностей ObjectContext или DbContext.Однако я предпочитаю создавать и размещать любые объекты в одном и том же методе.

Обратите внимание, однако, здесь обсуждение, где упоминается, по существу, сохранить эту ответственность вызывающей стороны, реализующей IDisposable (т. Е. Ваш контроллер реализует ее), вызывая инфраструктуру внедрения зависимостейутилизация для вас автоматически.

Обеспечение вызова IDisposable для объектов, созданных в контроллере и переданных для просмотра

1 голос
/ 30 сентября 2011

Интерфейс IDisposable предназначен для использования классами, которые также получают доступ к неуправляемым ресурсам. Это дает классу возможность как можно быстрее очистить эти неуправляемые ресурсы.

Страница MSDN для интерфейса IDisposable фактически является хорошим примером того, что это значит.

...