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 程度以上) で呼び出されると非常に悪くなります。戻るまでに 1 分以上かかる場合があります。また、このメソッドが複数のクライアントから同時に呼び出されると、タイムアウトになります。アプリプールがダウンするのを見たことさえあります。ループ内で AzMan への呼び出しが行われていることに注意してください。AzMan はアンマネージ COM コンポーネントです。
パフォーマンスを向上させるために、マルチスレッドのアプローチを検討しています。.NET 4 はオプションではないため、Parallel.For はオプションではありませんが、3.5 で同等のことを行うことは可能です。
私の質問は、一連のスレッドを作成して (すべてを待機してから戻る)、実際にパフォーマンスが向上するかどうかです。IIS6 でホストされている WCF サービスでこれを行うことには危険がありますか?