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