Объект ServiceChannel больше в дампе памяти webapi - PullRequest
1 голос
/ 27 апреля 2020

У меня есть webapi, и он по очереди вызывает много сервисов wcf, в течение некоторого времени объем памяти w3p растет, и мы должны перезапустить Apppool. После получения дампа памяти я мог засвидетельствовать, что за период времени было создано больше объектов ServiceChannel. Что может быть причиной этого? Я мог видеть, что всякий раз, когда создается wcfclient, не вызывается функция Close (), а вызывается Abort (). Это правильный способ справиться с клиентом?

1 Ответ

0 голосов
/ 27 апреля 2020

Вам нужно позвонить Dispose или Close как обычно, но этого недостаточно, потому что:

Оператор C# using приводит к вызову Dispose(). Это то же самое, что и Close(), который может выдавать исключения при возникновении сетевой ошибки.

Рекомендованный способ закрыть клиент WCF можно найти здесь, в этой статье MSDN .

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

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

...