C# 高效地合并来自所有域控制器的数据
我想合并域中所有域控制器的数据 例如,我对所有logonCounts求和,只选择最新的lastLogon。这是在C# 高效地合并来自所有域控制器的数据,c#,active-directory,C#,Active Directory,我想合并域中所有域控制器的数据 例如,我对所有logonCounts求和,只选择最新的lastLogon。这是在私有静态用户MergeData(用户alreadyknowuser,用户newlyRetrieveUser)方法中完成的 这是我的密码: foreach (Domain domain in this.Domains) { ConcurrentDictionary<string, User> usersFromCurrentDomain = new Concurren
私有静态用户MergeData(用户alreadyknowuser,用户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);
}
});
}
}
foreach(此.Domains中的域)
{
ConcurrentDictionary usersFromCurrentDomain=新建ConcurrentDictionary();
foreach(域中的ActiveDirectoryDomainController domainController.domainController)
{
DirectoryEntry domainControllerDirectoryEntry=domainController.DirectoryEntry;
ICollection userFromCurrentDomainController=EnumerateAllUsersInDomainController(domainControllerDirectoryEntry);
Parallel.ForEach(userFromCurrentDomainController,currentUser=>
{
字符串userId=currentUser.Id;
if(usersFromCurrentDomain.Contains(userId))
{
用户检索User=usersFromCurrentDomain[userId];
retrievedUser=合并数据(retrievedUser,currentUser);
usersFromCurrentDomain[id]=retrievedUser;
}
其他的
{
usersFromCurrentDomain.Add(userId,currentUser);
}
});
}
}
我认为它的效率是O(n²)(对吗?)
有没有什么方法可以得到更有效的算法
提前谢谢。这不是O(n^2)。它是O(n^3),因为您迭代域,在域内部您迭代域控制器,在域控制器内部您迭代用户。如果您想对此进行优化,那么首先,您应该查看调用EnumerateAllUsersInDomainController(domainControllerDirectoryEntry)
。如果您有一个EnumerateAllusInDomainController
方法,该方法将需要一个目录条目的列表,不是更好吗?如果您有这样的方法,那么优化将包含以下元素:
- 您迭代
this.Domains
并将domain.DomainControllers
与包含域控制器的列表合并
- 您可以在单独的迭代中迭代域控制器,生成DirectoryEntry列表
- 您可以调用新创建的
EnumerateAllusInDomainController
- 您可以根据需要分析结果