sab*_*669 0 .net c# performance .net-3.5
我有这段代码:
DataTable dt = new DataTable();
dt.Columns.Add("Status");
dt.Columns.Add("File");
dt.Columns.Add("Revision");
int i = 0;
foreach (SvnStatusEventArgs status in statuses) // statuses is a Collection
{
dt.Rows.Add();
switch (status.LocalContentStatus)
{
case SvnStatus.NotVersioned:
dt.Rows[i]["Status"] = "Not Versioned";
break;
default:
dt.Rows[i]["Status"] = status.LocalContentStatus.ToString();
break;
}
dt.Rows[i]["File"] = status.Path;
foreach(SvnInfoEventArgs info in infos) //infos is a Collection
{
if (status.Path.Equals(info.Path))
{
dt.Rows[i]["Revision"] = info.Revision;
break;
}
}
i++;
}
Run Code Online (Sandbox Code Playgroud)
statuses
并且infos
可以在每个高达20K行,然而,我的嵌套的foreach可能需要很长的时间.
如果我将这些集合转换为列表然后尝试对它们进行排序,我想我可以加快速度Path
.
查看Sort方法的MSDN页面,我不知道如何比较Path
SvnStatusEventArgs [n]和SvnStatusEventArgs [n + 1]中的字段.然后我也开始怀疑,因为我将完全迭代这两组对象并对它们进行排序,这真的比我现有的代码更有效吗?我想它会是n*2而不是n*n,对吗?
对于它的价值,Path
我试图排序的字段只是一个字符串.
您可以创建一个Dictionary<string, int>
(关键是路径和修订版的值).
Dictionary<string, int> pathRevisions = infos
.GroupBy(info => info.Path)
.ToDictionary(group => group.Key, group => group.First().Revision);
Run Code Online (Sandbox Code Playgroud)
.... 在循环:
int revision;
if(pathRevisions.TryGetValue(status.Path, out revision))
dt.Rows[i].SetField("Revision", revision);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
93 次 |
最近记录: |