Объектные отношения

Это останавливает от недавних нескольких сообщения, которые я сделал на событиях и управлении памятью в целом. Я делаю новый вопрос, поскольку я не думаю программное обеспечение, которое я использую, имеет какое-либо отношение к полной проблеме, и я пытаюсь понять немного больше о том, как правильно управлять вещами. Это - ASP.NET.

Я пытался понять, что потребности в Располагают/Завершают за прошедшие несколько дней и полагают, что я дохожу до стадии, где я довольно доволен тем, когда я должен реализовать Расположение/Завершение. 'Если у меня есть участники, которые реализуют IDisposable, помещают явные вызовы в их располагать в моем располагать метод', кажется, мое понимание. Так, теперь я думаю, возможно, свое понимание объектного времени жизни и что держится за то, что является просто неправильным!

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

Так, у меня есть класс репозитория, в нем у меня есть DataContext, который я создаю, когда репозиторий создается. Я реализую IDisposable, и когда мой вызывающий объект сделан, я звоню, Располагают на моем репозитории и явно называют DataContext. Расположите (). Теперь, один из методов этого класса создает и возвращает список объектов, которые это возвратило моему фронтэнду.

Фронтэнд-> Контроллер-> Репозиторий-> Контроллер-> Фронтэнд.

(Используя Профилировщика Памяти Redgate, я беру снимок своего программного обеспечения, когда страница сначала загружается). Мой фронтэнд создает объект контроллера на загрузке страницы и затем выполняет запрос в репозиторий, передающий список обратно объектов. Когда страница закончена, загрузившись, я звоню, Располагают на контроллере, который в свою очередь звонит, располагают на контексте. В моем уме, который должен означать, что мое соединение закрывается и что у меня нет экземпляров моего класса контроллера. Если я затем обновляю страницу, она переходит к двум 'Живым' экземплярам класса контроллера. Если я смотрю на объектный график хранения, объекты, которые я создал в своем вызове к списку, сохранены на в конечном счете тем, что похоже на Linq.

Контроллер/репозиторий в стороне, если я создаю список объектов где-нибудь, или я создаю объект и возвращаю его куда-нибудь, действительно ли меня в безопасности просто предположить, что.NET в конечном счете прибудет и очистит вещи для меня или является там лучшей практикой? 'Живые' экземпляры намекают мне, что они находятся все еще в памяти и активных объектах, то, что RMP, по-видимому, вызывает GC, ничего не означает?

1
задан Abel 1 June 2010 в 22:06
поделиться

2 ответа

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

Другими словами: ваше соединение должно быть закрыто, но в памяти все равно останется "удаленный" экземпляр DataContext.

Возможно, вы захотите прочитать эту статью о сборке мусора .NET.

1
ответ дан 3 September 2019 в 00:08
поделиться

Мой ответ на ваши вопросы состоит из двух частей:

  1. Как разработчику приложения, вам никогда не нужно будет выполнять сборку мусора самостоятельно. Это до .NET. В методе Dispose () от вас потребуется только отказаться или освободить ресурсы, которые вы приобрели, но не требуется вызывать какой-либо метод для явной сборки мусора. Если вы это сделаете, в лучшем случае, когда это будет сделано, неопределенно.

  2. Когда ваш контроллер возвращает список во внешний интерфейс , помните, что внешний интерфейс не должен ничего знать о вашей серверной (бэкэнд) технологии. Это может быть C #, Java, PHP, вы поняли. Ответ, который серверная часть возвращает клиентской части, является просто ответом HTTP и соответствует протоколу HTTP. Итак, как только ответ оформлен и возвращен во внешний интерфейс, метод контроллера выходит за пределы области видимости, а объекты в этой области подлежат сборке мусора. В этой ситуации вам не придется беспокоиться об утечках памяти.

1
ответ дан 3 September 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: