私は同じ問題に苦しんでおり、以下の投稿の方法論は私自身よりもはるかに迅速でした:
http://msdn.microsoft.com/en-us/library/ms180881(v=vs.80).aspx
...質問に答えるには、次のようなものを使用して、ループ内にいる間にエントリを直接処理しようとしているように見えます。
If Not UserAccount.GetDirectoryEntry().Properties("sAMAccountName").Value Is Nothing Then sAMAccountName = UserAccount.Properties("sAMAccountName")(0).ToString()
...これはパフォーマンスに劇的な影響を及ぼします。ループ内のディクショナリにコレクションを追加してからディクショナリを処理することで、これを回避できます。
Dim searchResult As SearchResult
Dim dictLatestLogonDatesTemp As New Dictionary(Of String, Date)
SearchResults1 = mySearcher.FindAll()
For Each searchResult In SearchResults1
Dim propertyKey,sAMAccountName As String
Dim dteLastLogonDate As Date = Nothing
For Each propertyKey In searchResult.Properties.PropertyNames
Dim valueCollection As ResultPropertyValueCollection = searchResult.Properties(propertyKey)
For Each propertyValue As Object In valueCollection
If LCase(propertyKey) = LCase("sAMAccountName") Then sAMAccountName = propertyValue
If LCase(propertyKey) = LCase("lastLogon") Then dteLastLogonDate = Date.FromFileTime(propertyValue)
Next propertyValue
Next propertyKey
If sAMAccountName <> Nothing Then dictLatestLogonDatesTemp.Add(sAMAccountName, dteLastLogonDate)
Next searchResult
ディクショナリonyには2つのエントリがあるため、少し制限がありますが、他の値をコンマで区切るか、ディクショナリ内の値のディクショナリを使用できます。
Dim tempDictionary As Dictionary(Of String, Dictionary(Of String, String))
これが誰かに役立つことを願っています!