Память, вероятно, будет оставаться увеличенной до тех пор, пока GC не запустится, что не будет соответствовать моменту, когда данные будут возвращены клиенту.
Вы пытались добавить точку останова или какую-либо запись в журнал в метод обслуживанияуверены, что метод вызывается при каждом запросе?Я не думаю, что WCF выполняет кеширование самостоятельно;по крайней мере, я никогда не делал этого в своих приложениях, которые его используют.
Редактировать:
Память останется в работе, пока не будет запущен сборщик мусора.Если у вашего процесса все еще есть много свободного места в куче, то для запуска GC действительно нет причин.
Согласно MSDN: http://msdn.microsoft.com/en-us/library/ee787088.aspx#conditions_for_a_garbage_collection
Мусорсбор происходит, когда выполняется одно из следующих условий:
В системе недостаточно физической памяти.
Память, используемая выделенными объектамипо управляемой куче превосходит приемлемый порог.Это означает, что в управляемой куче превышен порог допустимого использования памяти.Этот порог непрерывно регулируется по мере выполнения процесса.
Вызывается метод GC.Collect.Почти во всех случаях вам не нужно вызывать этот метод, потому что сборщик мусора работает непрерывно.Этот метод в основном используется для уникальных ситуаций и тестирования.
Вероятно, вы выделяете объекты в куче, но они не являются GC'd, потому что GC видитнет причин для запуска (в генерации кучи все еще есть свободное пространство, и нет смысла тратить время на его очистку).
Однако, если вы можете повторять свой вызов WCF снова и снова и в итоге получить Out ofИсключение памяти, тогда это будет означать, что у вас действительно есть проблема с хранением ссылок где-то.В этом случае я бы использовал профилировщик памяти, чтобы определить, что и на чем удерживается.
Правка # 2:
См. Также эту ветку: C #Поток не освобождает память