Веб-сервисы, утечки памяти и CRM - PullRequest
1 голос
/ 30 декабря 2010

У меня есть веб-сайт, который позволяет пользователям загружать CSV-файл. Это вызывает службу, которая считывает информацию из csv, помещает ее в объекты DynamicEntity и вызывает службу CRM для создания / обновления объектов в CRM. Когда этот сервис создает / обновляет объект, он запускает другие плагины для применения определенных бизнес-правил. Эти правила также могут создавать или обновлять объекты в CRM.

Проблема в том, что количество дескрипторов процесса w3wp.exe, который вызывает веб-сайт, увеличивается каждый раз, когда объект создается или обновляется, и он никогда не возвращается.

Я попытался включить код сборки мусора в бизнес-правила, и это уменьшает количество дескрипторов процесса w3wp CRM (запускаемого сетевой службой), но не другого процесса w3wp. Должен ли я иметь методы Dispose в веб-службе, которая вызывает службу CRM?

Надеюсь, это имеет смысл. Я не слишком знаком с проблемами управления памятью, поэтому любая помощь приветствуется. Кто-нибудь может дать мне несколько советов о том, как это предотвратить?

Спасибо, Neil

-> РЕДАКТИРОВАТЬ Хорошо, количество дескрипторов увеличивается, когда я вызываю метод Service.Create (DynamicEntity). Я не думаю, что размещение какого-либо кода здесь было бы полезно. Когда я выхожу из метода / класса / сервиса, который содержит этот вызов, счетчик дескрипторов остается без изменений. Что мне нужно знать, так это то, что я должен управлять или CRM заботится (или не заботится, но я ничего не могу с этим поделать)

-> Другое Править

Правильно, вот как это работает.

1) У нас есть CRM и связанные с ним услуги

2) У нас есть другая служба, независимая от CRM, которая использует службы CRM (номер 1 выше) для создания объектов на основе передаваемой в нее информации CSV

3) У нас есть веб-сайт, который позволяет пользователю загружать csv и вызывает службу № 2 выше для создания / обновления сущностей в CRM

4) У нас есть плагины, запущенные CRM, которые используют Сервис 1 выше для создания / обновления сущностей

Таким образом, пользователь загружает CSV на веб-сайт (3), это запускает службу (2). Когда служба 2 создает объект с использованием службы 1, служба 4 запускается. Вызовы службы 4 также используют службу 1 для создания объектов, и при вызове этих служб (с использованием метода Service.Create ()) количество дескрипторов процесса увеличивается. Когда метод / класс / службы завершают работу, счетчик дескрипторов остается тем же самым, и поэтому, когда весь процесс происходит снова, счетчик дескрипторов снова увеличивается.

1 Ответ

0 голосов
/ 17 февраля 2011

Убедитесь, что ваши сервисные ссылки заключены в операторы использования, как в вашем сервисе, так и в коде потребления и ваших плагинах. Дескрипторы со временем будут сноситься сборщиком мусора, но только если соблюдаются правила сборки мусора. Если бы вы не заметили ухудшение производительности, я бы не стал сильно беспокоиться - платформа довольно надежная.

Если вы хотите лучше понять, почему и для чего это нужно, найдите IDisposable в документации .NET Framework и посмотрите примеры в CRM SDK.

...