【发布时间】:2017-07-18 14:50:34
【问题描述】:
我们有以下递归函数用于查找成员对象,这些成员对象列在组对象的以下属性中。我们使用组列表进行组中的递归检查。
这个有大约 30k 用户和 40k 组的函数需要大约 20 分钟才能运行,我们希望加快运行速度。任何想法如何更有效地做到这一点?
foreach (ad_group_source group in group_source)
{
List<ad_user_source> list = FindMembers(group, group_source, user_source);
}
public static List<ad_user_source> FindMembers(ad_group_source group, HashSet<ad_group_source> group_source, HashSet<ad_user_source> user_source)
{
List<String> members = group.Members.Split(';').ToList();
if (members.Equals(""))
{
return new List<ad_user_source>();
}
List<ad_user_source> members2 = new List<ad_user_source>();
foreach (String member in members)
{
if (!member.Equals(""))
{
Boolean isUser = false;
ad_user_source gebruiker = user_source.FirstOrDefault(u => u.DistinguishedName == member);
if (gebruiker != null)
{
members2.Add(gebruiker);
isUser = true;
}
if (!isUser)
{
ad_group_source group2 = group_source.FirstOrDefault(g => g.CN == member.Substring(3));
if (group2 != null)
{
List<ad_user_source> l = FindMembers(group2, group_source, user_source);
members2.AddRange(l);
}
}
}
}
List<ad_user_source> members3 = members2.Distinct().ToList();
return members3;
}
【问题讨论】:
-
“让事情变得更快”在这里并不是世界上最大的问题,因为它可能只适用于您的代码而对其他人没有帮助。如果您想查看整个代码并提供示例数据,这可能在Code Review 上没问题,但在询问之前请阅读他们的帮助中心。
-
缓存这个操作值得吗?
-
@MikeMcCaughan:为什么它不能帮助任何人?我正在使用没有执行的递归函数?
-
我发现这段代码有很多错误。
-
因为改进您的代码的细节不一定与改进他人代码所需的更改相同。