长话短说。分析后,此命令占用 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(关键字:延迟执行)就会执行实际查询。
您不能将结果分配给列表,因为返回值是 IEnumerable
的非通用版本.打电话Cast<Changeset>()
或 OfType<Changeset>()
结果返回一个通用的 IEnumerable<Changeset>.
之后您可以调用ToList()
得到 List<Changeset>
. ToList()
遍历 IEnumerable<T>
所以它就像 foreach 并且占用了大部分时间。
我提到的方法是扩展方法,位于 System.Linq 命名空间中。
关于c# - TFS 2010 API - 遍历 QueryHistory 中返回的变更集列表太慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154441/