1
我遇到了此代码的问题......显然,它可以工作,但对我来说太慢了,有没有人有任何想法?它减慢当我试着登入以下使用PrincipalContext搜索所有用户名的LDAP(Active Directory)及其信息
Dim u As UserPrincipal = UserPrincipal.FindByIdentity(ctx, p.SamAccountName)
同样,下面的代码工作得很好,但它的速度慢的废话。如果我拿出上面的那段代码,并且只搜索p.SamAccountName
它在1秒内完成,所以我确定我做了一些不正确的事情。
Dim sw As New Stopwatch
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
sw.Start()
DataGridView1.ColumnCount = 3
DataGridView1.Columns(0).Name = "Account Name"
DataGridView1.Columns(1).Name = "First Name"
DataGridView1.Columns(2).Name = "Last Name"
Dim ctx = New PrincipalContext(ContextType.Domain, "JOI", DomainName)
Dim userPrin As New UserPrincipal(ctx)
userPrin.Name = "*"
Dim searcher = New System.DirectoryServices.AccountManagement.PrincipalSearcher()
searcher.QueryFilter = userPrin
Dim results = searcher.FindAll()
For Each p As Principal In results
Dim u As UserPrincipal = UserPrincipal.FindByIdentity(ctx, p.SamAccountName)
Dim row As String() = New String() {u.SamAccountName, u.GivenName, u.Surname}
DataGridView1.Rows.Add(row)
Next
sw.Stop()
MessageBox.Show("Finished in :" & sw.Elapsed.Duration.Seconds & " seconds")
End Sub
Private Shared Function DomainName() As String
Dim objRootDSE As New DirectoryEntry("LDAP://RootDSE")
DomainName = objRootDSE.Properties("defaultNamingContext")(0)
End Function
测试现在这个样子,但通过你在做什么期待后,我看到我的问题......不能相信我没有看到这一点。尽管如此,谢谢。几分钟后我会尽快发布解决方案。 – TonyW
谢谢你的帮助!像魅力一样,从10秒到1整个AD结构。 – TonyW