Служба Windows WCF не освобождает ресурсы / память после каждого вызова - PullRequest
1 голос
/ 20 сентября 2010

Я создал приложение WCF, работающее в Windows Service.Он был установлен с помощью установщика Windows.Я следовал процедуре, упомянутой в следующей статье, для того же самого.

http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic4

Большинство свойств WCF сохраняются по умолчанию для протокола net.tcp для каждого экземпляра вызова и т. Д.

Потребление памяти сервисом увеличивается после каждого звонка и не уменьшается.В конце он отбрасывает потребление OutOfMemory.

Приложение возвращает очень тяжелые строковые данные.С помощью программы профилирования памяти я обнаружил, что память все еще выделяется для строковых объектов и увеличивается во время вызова.

В соответствии с моим пониманием строка означает, что управляемые объекты должны выпускать данные один раз из области видимости.

Дайте мне знать, если какая-либо другая информация о конфигурации / кодировании нужна конкретно.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2010

Было бы очень сложно ответить на этот вопрос без какого-либо кода для просмотра. Вы всегда можете вызвать GC.Collect (GC.MaxGeneration), чтобы вызвать сборку мусора и посмотреть, не уменьшает ли это потребление памяти. В идеале это был бы только временный код для отслеживания того, что происходит в приложении. Если принудительная сборка мусора не уменьшает потребление памяти, то ссылки на строки должны быть сохранены, через статические переменные-члены или что-то еще: не имея представления о том, что такое код, любая теория будет выстрелом в темноте

0 голосов
/ 13 января 2014

После многих неудачных попыток обработать LOH (http://msdn.microsoft.com/en-us/magazine/cc534993.aspx), которая в моем контексте была очень большой строкой, я создал собственный класс для обработки.

Вместо того, чтобы хранить большую строку в одном объекте, я сохраняю ее как коллекцию маленьких строк в пользовательском объекте. .NET удалил его правильно, не создавая вышеупомянутую проблему.

Другое возможное решение с отработанным для меня способом - использовать объект file для хранения большого файла и доступа к нему как к текстовому ридеру. Это работает хорошо и сохраняет небольшой размер приложения. К сожалению, для меня это не сработало, и доступ к местоположению файла не был разрешен для приложения.

0 голосов
/ 21 сентября 2010

Должно быть что-то, хранящее ссылки на эти строки в коде.Можете ли вы использовать свой профилировщик для отслеживания ссылок, поддерживающих строковые объекты?

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