Добрый день всем!
Столкнулись с проблемой производительности при массовом обновлении полей у объектов через веб-сервис 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

Но это крайний вариант.