我有两个List<T>
对象。它充满了我自己的类iFile
的对象,其中包含一个文件路径和最后一个呼叫的最后一个编辑日期。
现在,我想比较这两个列表,但是我当前的代码运行太慢了!(〜70.000个条目4分钟(
这是我的代码:
private static List<iFile> compareLists(List<iFile> old)
{
List<iFile> cf = new List<iFile>();
foreach(iFile file in files)
{
bool notChanged = false;
iFile oldFile = files.Where(f => f.fPath == file.fPath).FirstOrDefault();
if(oldFile != null & oldFile.lastChange.Equals(file.lastChange))
{
notChanged = true;
}
if(!notChanged)
{
cf.Add(file);
}
}
return cf;
}
您建议更改以获得更好的性能结果?
您可以通过fPath
加入文件。这将在内部使用哈希设置来查找两个集合之间的匹配。与具有复杂性o(n(的简单Where
搜索不同,哈希集中的搜索具有O(1(复杂性:
var modifiedFiles = from file in files
join oldFile in old on file.fPath equals oldFile.fPath
where oldFile.lastChange != file.lastChange
select file;
return modifiedFiles.ToList();