c# – TFS 2010 API – 迭代QueryHistory中返回的更改集列表太慢了

长话短说.分析后,此命令占用处理的0.1%

var ChangesetList = TFSConnection.GetInstance().GetVersionControl().QueryHistory
    (Path, VersionSpec.Latest,0, RecursionType.Full, "", null, 
    VersionSpec.Latest, Int32.MaxValue,true, false);

这一个,65.7%. (有趣的是,内部的所有处理只消耗3%)

foreach (Changeset changeset in ChangesetList)

我得到我的清单需要几秒钟……
怎么了?为什么在列表中迭代这么慢?

有没有更快的方法来做到这一点?

编辑:另外,为什么我不能将它直接转换为List< Changeset> ?

对VersionControlServer.QueryHistory的调用返回一个IEnumerable,所以我假设它就像在LINQ to Objects中一样,一旦迭代IEnumerable(关键字:延迟执行),就会执行实际的查询.

您无法将结果分配给List,因为返回值是IEnumerable的非泛型版本.在结果上调用Cast< Changeset>()或OfType< Changeset>()将返回通用IEnumerable< Changeset>.之后,您可以调用ToList()并获取List< Changeset>. ToList()遍历IEnumerable< T>所以它就像foreach一样,占据了大部分时间.

我提到的方法是扩展方法,位于System.Linq命名空间中.

相关文章
相关标签/搜索