2010-09-01 10 views
26

Ich habe ein paar Antworten! Fühlen Sie sich frei, eigene Erkenntnisse einzubringen.Was ist die schnellste Methode zum Abrufen von TFS-Teamprojekten mithilfe der TFS SDK-API?

Soweit ich weiß, gibt drei Hauptwege sind eine einfache Liste von Team Projekte von TFS abzurufen:

  • Mit dem neuen Katalog Dienst (TFS 2010)
  • Mit dem VersionControlServer (TFS 2008/2010)
  • die ICommonStructureService (TFS 2008/2010)

die einfache Tests durchgeführt I Unter Verwendung Vergleich der drei Verfahren, wenn zurück die Gesamtzahl der Projekte zu zählen.

Methode 1: Catalog Service (TFS 2010 Nur)

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; 
    } 

Methode 2: VersionControlServer

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

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

Methode 3: ICommonStructureService

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

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

Die Komponententests, die ich durchführte, waren sehr einfach. Ich habe die .Count() -Methode verwendet, um sicherzustellen, dass wir alle Teamprojekte iteriert haben (.Any() ist schneller, da es nach der Rückgabe des Vornamens aufhört).

Ergebnisse

Für TFS 2010 läuft 3 Tests 5 mal in Folge:

TFS 2010 Chart Average Duration

TFS 2010 Duration Results

Für TFS 2008 laufen zwei Tests (kein Katalogdienst) 5 mal hintereinander:

TFS 2008 Chart Average Duration

TFS 2008 Duration Results

Biases

  • Der TFS 2010-Server dies gegen lief war in der Entwicklung, so kaum jemand es wurde mit.
  • Ich habe dies nicht mit Benutzerkonten mit den geringsten Rechten getestet. Ich bin ein Admin auf dem Server.
  • Ich kommuniziere mit einem TFS-Server innerhalb des Unternehmensnetzwerks. In TFS 2010 können Sie mehrere TfsTeamProjectCollections haben; Sie müssen diese auch durchlaufen. In diesem Test habe ich nur eine Sammlung verwendet.
  • Ich verwendete den Konstruktor zum Erstellen der TfsTeamProjectCollection; Ich wechselte auf die TfsTeamProjectCollectionFactory.GetTeamProjectCollection()-Methode und es war eigentlich jeder Testlauf langsamer. Es kann schneller sein, wenn Sie mehrere Anrufe pro Anfrage tätigen.
  • Bei TFS 2008 ist der Server ein Produktionsserver unter Last (d. H. Reale Welt).

Entdeckungen

Wie Sie sehen können, wie es scheint, die ICommonStructureService ziemlich schnell ist alles das Team bei der Suche nach Projekten nach der ersten Ausführung. Hinweis: Ich hatte frühere Tests mit ICommonStructureService3 (neu in TFS 2010 API) durchgeführt und derselbe Code war langsamer als die anderen beiden Methoden.

Wenn konsistente Leistung der Schlüssel ist, würde ich empfehlen, VersionControlServer zu tun.

Denken Sie jedoch daran, was Sie mit den Teamprojekten machen wollen. Wenn man sie einfach auflistet, ist das ICSS wahrscheinlich der richtige Weg. Wenn Sie die Liste zur Navigation verwenden möchten, benötigen Sie auch den Pfad ($/TeamProject) oder Uri. In diesem Fall ist VCS wahrscheinlich der beste Weg zu gehen, da Sie die ServerItem -Eigenschaft verwenden können, die den Pfad zu dem Element enthält. Sie könnten auch mit einer einfachen String-Verkettung mit ICSS ("$/" + p.Name) durchkommen.

Ich hoffe, dies hilft anderen TFS API-Entwicklern.

+0

Obwohl das Thema Leistung betrifft, beachten Sie, dass der 'VersionControlServer' nicht immer alle Teamprojekte auflistet. Dies hat möglicherweise damit zu tun, ob das Projekt die Quellcodeverwaltung verwendet. –

Antwort

8

Blick auf Ihre Statistiken, sehe ich nicht den Vorteil von Suche nach dem schnellsten. Sie scheinen alle unglaublich schnell zu sein. Könnte dies eine Vorprogrammierung über die Optimierung sein?