c# - TFS 2010 API - 遍历 QueryHistory 中返回的变更集列表太慢了

标签 c# .net changeset tfs-sdk

长话短说。分析后,此命令占用 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/

相关文章:

.net - 如何为使用 Entity Framework 4.2 的代码编写单元测试?

mysql - 有没有办法在 liquibase 中合并变更集?

c# - 没有收到 devexpress 表格的提示

c# - 集成测试 - 如何使用 Microsoft.Owin.Testing.TestServer 访问端点?

c# - 删除表行而不是隐藏在 rdlc 报告中

c# - .NET 二进制文件读取性能

c# - 如何在虚拟现实 (GearVR) 应用程序中打开 URL

c# - 如何指定要使用的 WebRequest IP(或 HttpWebRequest,如果适用)(C#)

merge - 如何选择要合并附加到工作项的变更集?

tfs - 使用 tf.exe 时如何将工作项与 checkin 关联