当前位置 : 主页 > 网络推广 > seo >

.net – 使用TFS SDK API检索TFS团队项目的最快方法是什么?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一些答案!随意提供您自己的发现。 据我所知,有三种主要方法从TFS检索一个简单的团队项目列表: 使用新的目录服务(TFS 2010) 使用VersionControlServer(TFS 2008/2010) 使用ICommonStructureS
我有一些答案!随意提供您自己的发现。

据我所知,有三种主要方法从TFS检索一个简单的团队项目列表:

>使用新的目录服务(TFS 2010)
>使用VersionControlServer(TFS 2008/2010)
>使用ICommonStructureService(TFS 2008/2010)

在计算返回的项目总数时,我进行的简单测试比较了三种方法。

方法1:目录服务(仅限TFS 2010)

public IEnumerable<string> GetTeamProjectNamesUsingCatalog()
    {
        ReadOnlyCollection<CatalogNode> projectNodes = new TfsTeamProjectCollection(collectionUri).CatalogNode.QueryChildren(
                    new[] { CatalogResourceTypes.TeamProject },
                    false, CatalogQueryOptions.None);

        foreach (var tp in projectNodes)
            yield return tp.Resource.DisplayName;
    }

方法2:VersionControlServer

public IEnumerable<string> GetTeamProjectNamesUsingVCS()
    {
        TfsTeamProjectCollection tp = new TfsTeamProjectCollection(collectionUri);

        foreach (var p in tp.GetService<VersionControlServer>().GetAllTeamProjects(false))
            yield return p.Name;
    }

方法3:ICommonStructureService

public IEnumerable<string> GetTeamProjectNamesUsingStructureService()
    {
        var structService = new TfsTeamProjectCollection(collectionUri).GetService<ICommonStructureService>();

        foreach (var p in structService.ListAllProjects())
            yield return p.Name;
    }

我跑的单元测试是超级简单。我使用.Count()方法确保我们迭代所有的团队项目(.Any()更快,因为它将在返回名字后停止)。

结果

对于TFS 2010,连续运行3次测试5次:

对于TFS 2008,连续运行2次测试(无目录服务)5次:

偏差

>这个运行的TFS 2010服务器正在开发中,几乎没有人使用它。
>我没有测试这个与任何最低权限的用户帐户;我是服务器上的管理员。
>我正在与企业网络中的TFS服务器通信。
>在TFS 2010中,您可以有多个TfsTeamProjectCollections;你将需要通过这些迭代。在这个测试中,我只使用一个集合。
>我使用构造函数创建TfsTeamProjectCollection;我切换到使用TfsTeamProjectCollectionFactory.GetTeamProjectCollection()方法,它实际上较慢每个测试运行。如果您每次请求多次调用,它可能会更快。
>对于TFS 2008,服务器是负载下的生产服务器(即真实世界)。

发现

正如你所看到的,看起来像ICommonStructureService在第一次执行后查找所有团队项目相当快。注意:我之前使用ICommonStructureService3(TFS 2010 API中的新增)进行了测试,同样的代码比其他两种方法慢。

如果一致的性能是关键,我想我建议VersionControlServer来做。

记住,你想要做的是团队项目,但是。如果只是列出他们是你需要的,ICSS可能是去的方式。如果要使用列表进行导航,还需要路径($ / TeamProject)或Uri。在这种情况下,VCS可能是最好的方法,因为您可以使用ServerItem属性,它保存项目的路径。您也可以使用ICSS(“$ /”p.Name)避开简单的字符串连接。

希望这有助于其他TFS API开发人员。

看看你的统计数据,我没有看到找到最快的好处。他们都显得非常快。这可能是预编程优化吗?
网友评论