WCF не освобождает неиспользуемый буфер - PullRequest
0 голосов
/ 06 июля 2011

У меня есть служба wcf, и я использую указанные ниже значения конфигурации для того же.

maxItemsInObjectGraph="2147483647"
maxBufferPoolSize="2147483647" 
maxReceivedMessageSize="2147483647"

Все работает нормально, за исключением того, что мой сервис продолжает занимать память.Я сузил проблему, и причина, по которой она занимает много памяти, заключается в том, что она не освобождает эти неиспользуемые размеры буфера.Когда я использую для этого значения defalt, он работает просто без лишней памяти.

Есть ли способ заставить сервис запрашивать неиспользуемое пространство?

1 Ответ

0 голосов
/ 06 июля 2011

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

Получаете ли вы исключение OutOfMemory после пары запросов?

Обратите внимание, что 2147483647 байт - это 2 ГБ, поэтому потребуется 2 или 3 запроса, прежде чем вы исчерпаете память, если эти буферы были полностью выделены и не освобождены.

Вы уверены, что память просто не GC'd, потому что нет причин для этого? Если доступно пространство кучи и при определенных пороговых значениях, у него нет особых причин тратить время на сборку вещей.


Edit:

Вы также можете увидеть различное использование памяти в зависимости от размера этих созданных буферов и объектов. Часть этого описана здесь. По сути .net обрабатывает объекты размером более 85 000 байт как «большие» и уплотняет их по-разному.

Опять же, если вы никогда не получите исключение памяти или фактически исчерпаете память, то у вас, вероятно, нет проблемы. «другое» использование памяти не означает, что это «неправильно». Вы должны загрузить приложение и проверить, действительно ли оно исчерпывает память, что будет указывать на реальную утечку памяти. В противном случае он может просто нарастить память, пока не достигнет максимальных размеров кучи, а затем собрать все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...