Tri*_*hen 1 c# optimization foreach
以下代码可以获得所需的结果,但性能非常慢:
SearchResultCollection absaUsers = ABSAds.FindAll();
SearchResultCollection srcUsers = ds.FindAll();
foreach (SearchResult users in srcUsers)
{
string cn = users.Properties["cn"][0].ToString();
string sn = users.Properties["sn"][0].ToString();
string userID = users.Properties["uid"][0].ToString();
string description = users.Properties["PersonnelAreaDesc"][0].ToString();
string jobCodeID = users.Properties["JobcodeID"][0].ToString();
string CostCentreID = users.Properties["costCentreID"][0].ToString();
string CostCentreDescription = users.Properties["CostCentreDescription"][0].ToString();
string givenName = users.Properties["givenName"][0].ToString();
string employmentStatus = users.Properties["EmploymentStatus"][0].ToString();
string EmploymentStatusDescription = users.Properties["EmploymentStatusDescription"][0].ToString();
foreach (SearchResult absaUser in absaUsers)
{
string absaUID = absaUser.Properties["uid"][0].ToString();
string absaEmploymentStatus = absaUser.Properties["EmploymentStatus"][0].ToString();
string absaEmploymentStatusDescription = absaUser.Properties["EmploymentStatusDescription"][0].ToString();
string absaEmployeeNumber = absaUser.Properties["employeeNumber"][0].ToString();
if (absaUID == cn && absaEmployeeNumber==userID)
{
Console.WriteLine("User Record Found:" + cn);
sw.WriteLine("Modify" + "," + cn + "," + description + "," + userID + "," + givenName + "," + sn + "," + jobCodeID + "," + CostCentreID + "," + CostCentreDescription + "," + sn + "," + cn + "," + employmentStatus + "," + EmploymentStatusDescription);
sw.Flush();
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它遍历2个集合,并使用内部的mtach外部循环属性.关于如何优化性能的任何建议?
如果首先将所有absaUID值提取到查找中会更快:
var lookup = absaUsers.Cast<SearchResult>()
.ToLookup(x => x.Properties["uid"][0].ToString());
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
foreach (SearchResult users in srcUsers)
{
string cn = users.Properties["cn"][0].ToString();
foreach (SearchResult matches in lookup[cn])
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
您还没有显示如何absaUsers定义 - 如果它是LINQ查询表达式,那么可能是您现有的代码将在每次迭代时转到数据库 - 而上述情况则不然.在另一方面,如果srcUsers是也是一个LINQ查询表达式与一个数据库,你应该考虑使用,而不是加入做的所有匹配的数据库.
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |