Показать сообщение отдельно
Старый 29.12.2010, 15:50   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Melaen Посмотреть сообщение
Добрый день всем!

Столкнулись с проблемой производительности при массовом обновлении полей у объектов через веб-сервис CRM.

Пример: консольное приложение.

Исходный код:

Код:
        static CrmSdk.CrmService crmService = new CrmSdk.CrmService();
        static void Main(string[] args)
        {
            string Server = "servername";
            string orgName = "orgname";
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.OrganizationName = orgName;

            CrmSdk.CrmService crmService = new CrmSdk.CrmService();
            crmService.Url = "http://" + Server + "/mscrmservices/2007/crmservice.asmx";
            crmService.Credentials = new System.Net.NetworkCredential("", "", "");
            crmService.CrmAuthenticationTokenValue = token;
            crmService.PreAuthenticate = true;

            task task = new task();
            task.subject = "SpeedTest";
            Guid TaskID = crmService.Create(task);
            task = (task)crmService.Retrieve(EntityName.task.ToString(),
                                           TaskID, new AllColumns());

            for (int i = 0; i < 1000; i++)
            {
                task.subject = "SpeedTest " + i.ToString();
                crmService.Update(task);
                Console.WriteLine("Update Task " + task.subject);
            }
}

При запуске приложения, после инициализации веб-сервиса, появляется загрузка процессора на сервере приложением w3wp.exe - ~15% и приложением lsass.exe - ~45% (!). При запуске второй копии приложения одновременно с первой, загрузка процессора возрастает до 100% и работать в CRM становится невозможно. Сервер - виртуальная машина Windows Server 2008 SP2, на ней контроллер домена, SQL Server 2008 и все роли CRM сервера.
Возникли вопросы:
1) Что-то не так с кодом? (это тестовое приложение, но принцип работы с веб-сервисом такой везде)
2) Узкое место в аппаратной части? (два логических процессора 2,66 ГГц, 2 Гб памяти)
3) Или это нормальное поведение при такой нагрузке? То есть теоретически пользователи могут нагрузить сервер до такой степени стандартным функционалом CRM. Вопрос в количестве пользователей.
4) Вопрос с lsass.exe? Не понятно в чем причина загрузки сервера этим процессом.
5) Есть определенная задача, если нужно - объясню суть задачи. Попробуем подумать над другими способами решения. Сейчас думаем над тригерами и прямыми инсертами в базу SQL Но это крайний вариант.
По поводу приложения - всё выглядит правильным.
Поскольку аппаратка - виртуалка, то попробуйте добавить процессоров/ОЗУ.
По поводу прямых инсертов и триггеров - можете попробовать, но это нерекомендуемая кастомизация.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit