我有一个托管在 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 中进行等效操作是。
我的问题是创建一堆线程(然后在返回之前等待所有线程)实际上会提高性能吗?在 IIS6 托管的 WCF 服务中执行此操作是否存在危险?