15

私はこのコードを持っていました:

var context = new PrincipalContext( ContextType.Machine );
var user = UserPrincipal.FindByIdentity( context, username );

実行に約2〜3秒かかりました。PrincipalSearcherクラスを使用して書き直すことをお勧めしました:

var context = new PrincipalContext( ContextType.Machine );
var user = new UserPrincipal(context);
user.SamAccountName = username;
var searcher = new PrincipalSearcher(user);
user = searcher.FindOne() as UserPrincipal;

実行時間は 1 秒未満です。特に高速です。書き直しを勧めた人は、なぜそれが速く動くのか、私と同じくらい無知です。

なぜパフォーマンスに違いが生じるのでしょうか?

4

1 に答える 1

5

私が考えることができる唯一のもっともらしい理由は.FindByIdentity、探している属性を正確に指定していないため、一致する複数の属性をチェックする必要があることです。

探している属性を指定することで(このメソッドオーバーロードを使用して)それを行うことができます-比較のためにこれを試してください:

var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);

これはどれくらい速いですか?

于 2012-08-03T16:23:13.807 に答える