我正在尝试编写一个实用程序来查看自从我存储在数据库中的日期以来用户是否登录过 Windows。
private void bwFindDates_DoWork(object sender, DoWorkEventArgs e)
{
UserPrincipal u = new UserPrincipal(context);
u.SamAccountName = "WebLogin*";
PrincipalSearcher ps = new PrincipalSearcher(u);
var result = ps.FindAll();
foreach (WebAccess.WebLoginUsersRow usr in webAccess.WebLoginUsers)
{
UserPrincipal b = (UserPrincipal)result.
Single((a) => a.SamAccountName == usr.WEBUSER);
if (b.LastLogon.HasValue)
{
if (b.LastLogon.Value < usr.MODIFYDATE)
usr.LastLogin = "Never";
else
usr.LastLogin = b.LastLogon.Value.ToShortDateString();
}
else
{
usr.LastLogin = "Never";
}
}
}
但是性能很慢。我从中提取的用户列表有大约 150 个 Windows 用户,所以当我点击 UserPrincipal b = (UserPrincipal)result.Single((a) => a.SamAccountName == usr.CONVUSER);
每个用户需要 10 到 15 秒才能完成(单步执行我可以看到它正在执行步骤 a.SamAccountName == usr.CONVUSE
为每个人运行,所以最坏的情况正在运行O(n^2) 次)
关于提高效率的方法有什么建议吗?
最佳答案
关于c# - 快速查找可枚举对象中的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358416/