Утечка памяти в WCF (Duplex) на сервере

У меня есть довольно проблема с сервисом, работающим WCF в дуплексном режиме. Он утекает памяти (не много, но это около 80MB в день) и после того, как memory-profiler работает рядом с сервисом в течение 24 часов, я обнаружил, что большая часть памяти сидит в byte[] ссылается довольно беспорядочно, но я большинство ссылок заканчивается примерно так: one path holding the byte[] - array , а "корень" выглядит так: root

Я тоже вижу много ServiceChannel (около 200), исходящих (я думаю) из callback-каналов.

Я уверен, что у меня только 1 из них для каждого из подключенных клиентов.

В целом моя проблема выглядит почти так же, как и эта: утечка памяти в реализации Silverlight Wcf, но на стороне сервера.

Я даже пробовал [MTAThread] вещь, упомянутую здесь: WCF сервис сливает дескрипторы и память, когда клиент завершает работу, но это просто не решает проблему.

Я просто не думаю, что проблема в моем коде, так как я оборачиваю callback-каналы после получения их с помощью OperationContext.Current. GetCallbackChannel() в один из моих собственных объектов и они не утекают (в памяти есть только один такой канал для каждого клиента в любой момент времени) - конечно, я сбрасываю эти обратные вызовы несколько раз, так как канал может измениться (клиенты теряют соединение или подключаются снова), но у меня нет способа утилизации старых ссылок, поэтому я только сбрасываю их, и GC должен сделать свою работу над ними.

Я использую PerCall в своем сервисе, поэтому в моем коде вообще нет никаких манипуляторов с этими объектами.

Я действительно не знаю, как я могу справиться с этим, кроме перезапуска службы каждые несколько дней - решение, которое я не хочу пробовать прямо сейчас :(

Поэтому, пожалуйста, дайте мне какую-нибудь помощь/подсказку по этому вопросу - большое спасибо!

6
задан Community 23 May 2017 в 11:46
поделиться