Утечка памяти в WCF (дуплекс) на сервере
Привет, у меня возникли проблемы со службой, в которой WCF работает в дуплексном режиме. Он теряет память (не сильно, но это около 80 МБ в день), и после того, как профилировщик памяти работал вместе со службой в течение 24 часов, я обнаружил, что большая часть памяти находится вbyte[]
ссылается на довольно беспорядок, но большинство ссылок заканчивается примерно так: и «корень» выглядит так:
Я тоже вижу многоServiceChannel
(около 200) пришло (я думаю) из callback-каналов.
Я уверен, что у меня есть только 1 из них для каждого из подключенных клиентов.
В целом моя проблема, кажется, почти такая же, как эта:утечка памяти в реализации Silverlight Wcf но на стороне сервера.
Я даже попробовал[MTAThread]
вещь, упомянутая здесь:Служба WCF теряет дескрипторы и память, когда клиент истекает но это просто не решает проблему.
Я просто не думаю, что проблема в моем коде, так как я обертываю callback-каналы после получения егоOperationContext.Current.GetCallbackChannel<IServiceConnectorCallback>()
в одном из моих собственных объектов, и те не просачиваются (есть только один из них для каждого клиента в памяти при любом данном снимке) - уверен, что я несколько раз сбрасывал эти обратные вызовы, поскольку канал мог измениться (клиенты теряют соединение или переподключаются ) но у меня нет способа избавиться от старых ссылок, поэтому я их просто отбрасываю, и сборщик мусора должен выполнить свою работу над ними.
Я используюPerCall
на моем сервисе, поэтому я не имею никакого отношения к этим объектам в моем коде вообще.
Я действительно понятия не имею, как я могу справиться с этим, кроме перезапуска службы каждые несколько дней - решение, которое я не хочу сейчас искать :(
Поэтому, пожалуйста, дайте мне некоторую помощь / подсказки по этому вопросу - большое спасибо!