Это связано с недавними сообщениями о событиях и управлении памятью в целом. Я задаю новый вопрос, так как не думаю, что программное обеспечение, которое я использую, имеет какое-либо отношение к общей проблеме, и я пытаюсь понять немного больше о том, как правильно управлять вещами. Это ASP.NET.
Я пытался понять потребности в Dispose / Finalize в течение последних нескольких дней и считаю, что достиг стадии, когда я очень доволен, когда я должен / не должен реализовывать Dispose / Finalize , «Если у меня есть члены, которые реализуют IDisposable, я должен явно указывать их вызовы dispose в моем методе dispose». Итак, теперь я думаю, может быть, мое понимание времени жизни объекта и того, что держится за то, что просто неправильно!
Вместо того, чтобы придумать пример кода, который, я думаю, проиллюстрирует мою точку зрения, я собираюсь описать, как я могу на самом деле написать код и посмотреть, сможет ли кто-нибудь рассказать мне об этом.
Итак, у меня есть класс репозитория, в нем у меня есть DataContext, который я создаю при создании репозитория. Я реализую IDisposable, и когда мой вызывающий объект готов, я вызываю Dispose в моем хранилище и явно вызываю DataContext.Dispose (). Теперь один из методов этого класса создает и возвращает список объектов, которые были переданы моему внешнему интерфейсу.
Front End -> Controller -> Repository -> Controller -> Front End.
(Используя Redgate Memory Profiler, я делаю снимок своего программного обеспечения при первой загрузке страницы). Мой интерфейс создает объект контроллера при загрузке страницы, а затем делает запрос в хранилище, отправляя обратно список элементов. Когда страница заканчивается, я вызываю Dispose на контроллере, который, в свою очередь, вызывает dispose в контексте. По моему мнению, это должно означать, что мое соединение закрыто и у меня нет экземпляров моего класса контроллера. Если я затем обновлю страницу, она перейдет к двум «живым» экземплярам класса контроллера. Если я посмотрю на график удержания объектов, то объекты, которые я создал при вызове списка, в конечном итоге будут удерживаться тем, что выглядит как Linq.
Помимо контроллера / хранилища, если я создаю список объектов где-то или я создаю объект и возвращаю его куда-нибудь, могу ли я с уверенностью предположить, что .NET в конечном итоге придет и очистит меня или лучшая практика? «Живые» экземпляры подсказывают мне, что они все еще находятся в памяти и активных объектах, а тот факт, что RMP явно заставляет GC ничего не значить?