2010-09-01 2 views
26

У меня есть ответы! Не стесняйтесь вносить свои собственные выводы.Каков самый быстрый способ получения командных проектов TFS с использованием API TFS SDK?

Насколько я знаю, есть 3 основных способов получить простой список команды проектов с TFS:

  • Использование нового сервиса Каталога (TFS 2010)
  • Использование VersionControlServer (TFS 2008/2010)
  • Использование ICommonStructureService (TFS 2008/2010)

Простого тесты я проводил сравнил три метода при подсчете общего количества проектов вернулся.

Метод 1: Catalog Service (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 2010 Chart Average Duration

TFS 2010 Duration Results

Для TFS 2008, работает 2 теста (без каталога услуг) 5 раз подряд:

TFS 2008 Chart Average Duration

TFS 2008 Duration Results

Погрешности

  • ССТ 2010 Сервер это работает против был в разработке, так что вряд ли кто-нибудь использовал его.
  • Я не тестировал это с помощью учетных записей пользователей с наименьшими привилегиями; Я администратор на сервере.
  • Я общаюсь с сервером TFS в корпоративной сети.
  • В TFS 2010 вы можете иметь несколько TfsTeamProjectCollections; вам нужно будет итерации через них. В этом тесте я использовал только одну коллекцию.
  • Я использовал конструктор для создания TfsTeamProjectCollection; Я переключился на использование метода TfsTeamProjectCollectionFactory.GetTeamProjectCollection(), и он был фактически медленнее каждого тестового прогона. Это может быть быстрее, если вы делаете несколько вызовов по запросу.
  • Для TFS 2008 сервер - это производственный сервер под нагрузкой (т. Е. Реальный мир).

Результаты

Как вы можете видеть, это кажется, что ICommonStructureService довольно быстро при поиске всех команд проектов после первого исполнения. Примечание: Я провел более ранние тесты, используя ICommonStructureService3 (новый в TFS 2010 API), и тот же код был медленнее, чем два других метода.

Если постоянная производительность является ключевой, я бы рекомендовал VersionControlServer сделать это.

Имейте в виду, что вы хотите делать с командами, однако. Если просто перечислять их все, что вам нужно, ICSS, вероятно, путь. Если вы хотите использовать список для навигации, вам также понадобится путь ($/TeamProject) или Uri. В этом случае VCS, вероятно, является лучшим способом, так как вы можете использовать свойство ServerItem, которое содержит путь к элементу. Вы также можете избежать простой конкатенации строк с помощью ICSS ("$/" + p.Name).

Надеюсь, это поможет другим разработчикам API TFS.

+0

Хотя тема включает в себя производительность, обратите внимание, что 'VersionControlServer' не всегда перечисляет все командные проекты. Это может иметь отношение к тому, использует ли проект контроль источника. –

ответ

8

Посмотрите на свою статистику, я не вижу преимущества , нахожу самый быстрый. Все они кажутся невероятно быстрыми. Может ли это быть предварительное программирование над оптимизацией?

 Смежные вопросы

  • Нет связанных вопросов^_^