doğru olmakla biraz yavaş performans gösteriyor.
Bunun nedeni, her bir sonuç için GetDirectoryEntry()
numaralı çağrıdır. Bu, yalnızca etkin dizin (AD) nesnesini değiştirmeniz gerektiğinde gerekli olan DirectoryEntry
nesnesini oluşturur. Sorgunun tek bir nesneyi döndürmesi yeterlidir, ancak AD'deki tüm nesneleri listelerken bu, performansı büyük ölçüde düşürür.
Yalnızca AD'yi sorgulamanız gerekiyorsa, sonuç nesnesinin yalnızca Properties
koleksiyonunu kullanması daha iyidir. Bu, kodun performansını birkaç kez artıracaktır.
Bu documentation for SearchResult
class açıklanmıştır: SearchResult
sınıfın
Örnekleri DirectoryEntry
sınıfın örneklerine çok benzer. önemli fark SearchResult
için veriler zaten bir sorgudan döndürülen alır SearchResultCollection
, mevcut ise DirectoryEntry
sınıf Active Directory Etki Alanı Hizmetleri hiyerarşiden yeni nesne her erişildiğinde zaman onun bilgileri aldığından emin olduğunu , DirectorySearcher
sınıfı ile gerçekleştirilir. İşte
Properties
koleksiyonunu nasıl kullanılacağına dair bir
örnek: Biz numarasını kontrol etmek
Properties["name"].Count
kullanmamın nedeni özellikleri birden fazla değere sahip olabilir
public static List<string> GetComputers()
{
List<string> computerNames = new List<string>();
using (DirectoryEntry entry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no")) {
using (DirectorySearcher mySearcher = new DirectorySearcher(entry)) {
mySearcher.Filter = ("(objectClass=computer)");
// No size limit, reads all objects
mySearcher.SizeLimit = 0;
// Read data in pages of 250 objects. Make sure this value is below the limit configured in your AD domain (if there is a limit)
mySearcher.PageSize = 250;
// Let searcher know which properties are going to be used, and only load those
mySearcher.PropertiesToLoad.Add("name");
foreach(SearchResult resEnt in mySearcher.FindAll())
{
// Note: Properties can contain multiple values.
if (resEnt.Properties["name"].Count > 0)
{
string computerName = (string)resEnt.Properties["name"][0];
computerNames.Add(computerName);
}
}
}
}
return computerNames;
}
Documentation for SearchResult.Properties
Not, yani değerlerin
İşleri daha da geliştirmek için, arama yapan kişiye hangi özellikleri önceden kullanacağınızı bildirmek için PropertiesToLoad
koleksiyonunu kullanın. Bu, araştırmacının sadece kullanılacak olan verileri okumasına izin verir. DirectoryEntry
ve DirectorySearcher
nesneler uygun şekilde kullanılan tüm kaynakları serbest bırakmak amacıyla yerleştirilebilir gerektiği
not edin. En iyi , bir using
yan tümcesiyle yapılır.