DirectorySearcher FindOne() を実行してから、最初のネットワーク パケットが LDAP サーバーに送信されるまでに 2 ~ 5 秒の初期遅延が見られます。最初の実行後、後続の実行は約 45 秒間即座に完了します。その期間の高速実行の後、次の実行は遅延され、その後のすべての実行は即座に完了します。ある種のキャッシングが行われているようですが、それを確認したり、初期遅延の原因を説明したりするリソースを見つけることができませんでした.
クライアントの Windows 2008 サーバーでこれに気付き、自社の Windows 2008 および Windows 7 ボックスで再現しました。
私の単純な .NET 4.0 C# アプリは次のようになります。「Started」メッセージと「Finished」メッセージの間で遅延が発生します。
この遅延が最初の FindOne() 実行で発生する理由は何ですか? どんな助けでも大歓迎です!
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace LdapTest
{
class Program
{
static void Main(string[] args)
{
string[] fetchAttributes;
fetchAttributes = new string[] { "{string[0]}" };
using (DirectoryEntry searchRoot = new DirectoryEntry("LDAP://localserver/ou=lab,dc=ourdomain,dc=com", "cn=binduser,ou=Services,dc=ourdomain,dc=com", "Password", AuthenticationTypes.ReadonlyServer))
{
using (DirectorySearcher searcher = new DirectorySearcher(searchRoot, "(sAMAccountName=UserName)", fetchAttributes, SearchScope.Subtree))
{
Console.WriteLine("Started");
SearchResult result = searcher.FindOne();
Console.WriteLine("Finished");
}
}
}
}