Неизданные ресурсы с прокси WCF не были удалены до завершения работы приложения? - PullRequest
1 голос
/ 29 июня 2011

У меня есть приложение .NET, в котором я создаю экземпляр прокси WCF, который хранится в памяти, пока приложение не завершит работу. Подумайте об одноэлементном сервисном агенте, который ссылается на прокси, то есть прокси повторно используется для последовательных вызовов сервиса. Нет явных вызовов proxy.Dispose () или использующих блоки.

Вопрос в том, у меня есть какие-нибудь ресурсы? Насколько я могу судить, сборка мусора .NET предотвратит утечку памяти (прокси управляются, не так ли?). Что-нибудь еще - сетевые подключения, порты и т. Д.

edit: элемент не удерживается в другом процессе вне приложения.

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Прокси управляются, но они могут поддерживать соединения. Вот почему прокси реализуют IDisposable.

Общая история такова: если объект реализует IDisposable, вы должны его утилизировать.

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

Короче говоря: всегда звоните Dispose по одноразовым предметам.

1 голос
/ 29 июня 2011

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

1 голос
/ 29 июня 2011

Нет. Как только ваше приложение завершает работу, если вы не распределили глобальные ресурсы, такие как разделяемая память и т. Д., Windows закроет все ваши сокеты и освободит всю память, выделенную вашей программе. Если вы считаете, что что-то похоже на утечку, это может быть из-за того, что ваша программа не завершает работу полностью (проверьте диспетчер задач).

0 голосов
/ 29 июня 2011

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

Для закрытия одноэлементной службы клиентский прокси завершит только транспортный сеанс, а не одноэлементный контекст и экземпляр внутри. Если синглтон Сервис поддерживает контракты без сеанса, эти контракты не будут оплачиваться отдельно: они тоже будет подключен к тому же экземпляру. По своей природе синглтон является общим, и каждый клиент должен просто создать свой собственный прокси или прокси к нему. закрытие прокси не завершило синглтон .

...