У меня есть служба WCF, размещенная в IIS6. Важная часть методы выглядит следующим образом:Будет ли многопоточность увеличивать производительность метода в сервисе WCF?
public MyUser[] GetUsers(string appName, string[] names)
{
List<User> users = new List<User>();
foreach (string user in names)
{
MembershipUser mu = this.ADAMProvider.GetUser(user, false); //Unmanaged call to AzMan
if (mu != null)
{
users.Add(MyUser.CreateFrom(mu);
}
}
return users.ToArray();
}
эффективность этого метода очень плохо, когда она вызывается с большим массивом имен пользователей (более 100 или около того). Это может занять более минуты, чтобы вернуться. Кроме того, если этот метод вызывается одновременно более чем одним клиентом, он будет тайм-аут. Я даже видел, как он сбивает пул приложений. Обратите внимание, что в цикле выполняется вызов AzMan. AzMan - неуправляемый COM-компонент.
Чтобы увеличить производительность, я рассматриваю многопоточный подход. .NET 4 не является вариантом, поэтому Parallel.For не вариант, но выполнение эквивалента в 3.5.
Мой вопрос будет создавать кучу нитей (а затем ждать всех перед возвратом) на самом деле увеличить производительность? Есть ли опасность для этого в службе WCF, поддерживаемой IIS6?
+1 для хорошей идеи 'int count = 1;', приводит к многопоточному коду без оператора блокировки, без условий гонки. Я ранее улучшал производительность STA COM, внедряя веб-сервис и помещал его в IIS с помощью Web Garden с 10 активированными процессами. – DxCK