Проблемы с кучей памяти - PullRequest
       23

Проблемы с кучей памяти

7 голосов
/ 28 сентября 2011

Служба WCF, размещенная самостоятельно, должна работать 99% времени.Иногда у нас возникают проблемы с памятью:

memory leaks

Но после этого сервис работает как обычно.Как мы можем справиться с этим?Любые советы и рекомендации по созданию надежных услуг, которые выживут в разных ситуациях, кроме ситуаций, очень приветствуются.

Ответы [ 4 ]

3 голосов
/ 05 октября 2011

Я не очень уверен, где проблема, но утечка памяти может быть причиной.

Весь код управляется.И мы используем dotConnect для Oracle из devArt в качестве библиотеки уровня данных.

Вы предполагаете, что весь код управляется, но могут быть неуправляемые части.Тем не менее, вы должны вызывать метод Dispose для всех одноразовых объектов после их использования, не думайте, что они удаляются должным образом, как только они выходят из области видимости.Лучше всего не допускать, чтобы одноразовые объекты выходили за рамки без вызова их метода Dispose.Вы можете использовать операторы using, если используете их как локальные переменные.

DbConnection является хорошим примером для одноразовых предметов, убедитесь, что вы утилизируете все соединения (одноразовые предметы).

0 голосов
/ 07 октября 2011

Являетесь ли вы на 100% ни одной из ваших зависимостей неуправляемым кодом? Я видел нечто очень похожее на это, и это происходило потому, что мы освобождали память, которую другой процесс также попытался бы освободить позже.

0 голосов
/ 05 октября 2011

Каковы ваши поведенческие особенности, в частности ConcurrencyMode и InstanceContextMode.

, если для Multiple as ConcurrencyMode и InstanceContext установлено значение (PerCall или PerSession (по умолчанию)), вы можете определенно столкнуться с проблемами, если у вас большие DataStructures или нераспределенные ресурсы.

, если вы используетенесколько параллельных операций, попробуйте InstanceContextMode Single [ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]

0 голосов
/ 05 октября 2011

Если это проблема WCF (я не уверен, что делать с вашим дампом), я предлагаю вам активировать трассировку на стороне сервера WCF и посмотреть на исключения, если они есть (и отредактировать ваш вопрос, чтобы мыможет помочь вам).

Вот ссылка, объясняющая, как это сделать:

Как включить трассировку WCF

...