gpt4 book ai didi

c# - 为什么 principalsearcher 代码明显变慢

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:29 26 4
gpt4 key购买 nike

我有一个为人们分配用户名的网络服务。在内部,我调用了一系列函数来验证 AD 中是否存在跨 UserPrincipal、samAccountName、proxyaddresses 和 email 字段的用户名。

在单元测试中,这段代码需要 10 秒才能运行。部署到本地 Web 服务器的代码需要 9 分钟才能运行。我不认为这是第一次运行的问题,因为第二次运行的时间一样长。我们的域有超过 30k 用户,我必须搜索整个域以确保该名称不存在。不能使用按要求缓存,因为我们需要进行最新检查。

我已经搜索了如何提高速度,但没有找到任何结果。

有人对如何提高性能有建议吗?

    public bool DoesEmailExist(string email)
{
using (var context = GetPrincipalContext())
{
var userQuery = new UserPrincipal(context) { EmailAddress = email + "@*" };

var searcher = new PrincipalSearcher(userQuery);

var result = searcher.FindOne();

if (result == null)
{
var aliasQuery = new ExtendedUserPrincipal(context) { ProxyAddress = "*smtp:" + email + "@*" };

searcher = new PrincipalSearcher(aliasQuery);

var aliasResult = searcher.FindOne();

if (result == null)
{
return false;
}
}

return true;
}
}

private PrincipalContext GetPrincipalContext(string ou)
{
return new PrincipalContext(ContextType.Domain, dc, ou, ContextOptions.Negotiate);
}

编辑 - 我改用 DirectorySearcher,速度似乎有所提高。现在在运行的 web api 上需要 5 分钟。我仍然想知道为什么我的单元测试比 web api 快得多。使用日志记录代码,在单元测试中调用 DoesUserNameExist 需要 7 秒。通过运行的 web api 需要 5 分钟。

    public bool DoesUserNameExist(string userName)
{
string filter = "(|(samAccountName={NAME})(UserPrincipalName={NAME}@*)(mail={NAME}@*)(proxyAddresses=*smtp:{NAME}@*))";

filter = filter.Replace("{NAME}", userName);

using (var de = new DirectoryEntry("LDAP://" + domainController + "/" + rootOU))
{
var searcher = new DirectorySearcher();
searcher.Filter = filter;
searcher.PageSize = 1;
var result = searcher.FindOne();

if (result != null)
{
return true;
}

return false;
}
}

最佳答案

虽然 proxyAddresses 属性被编入索引,但它只对相等和以开头的过滤器有帮助,而不是以结尾和包含的过滤器。

  • 快速:proxyAddresses=sthproxyAddresses=sth*
  • 慢:proxyAddresses=*sth*, proxyAddresses=*sth

我不认为有类似“abcdsmtp:user@domain.com”的代理地址。
您可以简单地使用 proxyAddresses=smtp:{NAME}@*

关于c# - 为什么 principalsearcher 代码明显变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com