高效合并来自所有域控制器的数据
本文关键字:域控 控制器 数据 合并 高效 | 更新日期: 2023-09-27 18:31:50
我想合并域中所有域控制器的数据。
例如,我对所有登录计数求和,并且只选择最新的最后登录。这是在private static User MergeData(User alreadyKnownUser, User newlyRetrieveUser)
方法中完成的。
这是我的代码:
foreach (Domain domain in this.Domains)
{
ConcurrentDictionary<string, User> usersFromCurrentDomain = new ConcurrentDictionary<string, User>();
foreach (ActiveDirectoryDomainController domainController in domain.DomainControllers)
{
DirectoryEntry domainControllerDirectoryEntry = domainController.DirectoryEntry;
ICollection<User> userFromCurrentDomainController = EnumerateAllUsersInDomainController(domainControllerDirectoryEntry);
Parallel.ForEach(userFromCurrentDomainController, currentUser =>
{
string userId = currentUser.Id;
if(usersFromCurrentDomain.Contains(userId))
{
User retrievedUser = usersFromCurrentDomain[userId];
retrievedUser = MergeData(retrievedUser, currentUser);
usersFromCurrentDomain[id] = retrievedUser;
}
else
{
usersFromCurrentDomain.Add(userId, currentUser);
}
});
}
}
我认为它的效率是O(n²)(对吧?
有没有办法有更有效的算法?
提前谢谢。
这不是
O(n^2)。它是 O(n^3),因为您迭代域,在其中迭代域控制器,在其中迭代用户。如果你想优化这一点,那么首先,你应该看看 EnumerateAllUsersInDomainController(domainControllerDirectoryEntry)
的召唤 .如果你有一种EnumerateAllUsersInDomainControllers
的方法,可以期待一个DirectoryEntry
列表,那不是更好吗?如果您有这样的方法,则优化将包含以下元素:
- 迭代
this.Domains
并将domain.DomainControllers
与包含域控制器的列表合并 - 在单独的迭代中迭代域控制器,构建目录条目列表
- 调用新创建的
EnumerateAllUsersInDomainControllers
- 您可以根据需要解析结果