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