2010-09-01 14 views
26

Ho delle risposte! Sentiti libero di contribuire con le tue scoperte.Qual è il metodo più veloce per recuperare i progetti del team TFS utilizzando l'API SDK di TFS?

Per quanto ne so, ci sono 3 modi principali per recuperare un semplice elenco di team Progetti da TFS:

  • utilizzando il nuovo servizio di catalogo (TFS 2010)
  • Utilizzando la VersionControlServer (TFS 2008/2010)
  • Uso della ICommonStructureService (TFS 2008/2010)

le semplici prove ho condotto confrontato i tre metodi quando il conteggio del numero totale di progetti restituito.

Metodo 1: Service Catalog (TFS 2010 solo)

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

Metodo 2: VersionControlServer

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

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

Metodo 3: ICommonStructureService

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

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

I test di unità che ho eseguito erano semplicissimi. Ho usato il metodo .Count() per assicurarci di aver iterato tutti i progetti del team (. Any() è più veloce poiché si fermerà dopo che il nome è stato restituito).

Risultati

Per TFS 2010, in esecuzione 3 test 5 volte di fila:

TFS 2010 Chart Average Duration

TFS 2010 Duration Results

Per TFS 2008, in esecuzione 2 test (nessun servizio di catalogo) 5 volte di seguito:

TFS 2008 Chart Average Duration

TFS 2008 Duration Results

pregiudizi

  • Il server TFS 2010 questo è stato eseguito nei confronti era in fase di sviluppo, in modo quasi nessuno stava usando.
  • Non l'ho verificato con nessun account utente con privilegi minimi; Sono un amministratore sul server.
  • Sto comunicando con un server TFS all'interno della rete aziendale.
  • In TFS 2010, è possibile avere più TfsTeamProjectCollections; dovrai ripetere anche quelli. In questo test, ho usato solo una raccolta.
  • Ho utilizzato il costruttore per creare lo TfsTeamProjectCollection; Sono passato a utilizzare il metodo TfsTeamProjectCollectionFactory.GetTeamProjectCollection() ed è stato effettivamente più lento ogni test eseguito. Potrebbe essere più veloce se si effettuano più chiamate per richiesta.
  • Per TFS 2008, il server è un server di produzione sotto carico (ad esempio, mondo reale).

risultati

Come si può vedere, sembra che la ICommonStructureService è abbastanza veloce a trovare tutto il team progetti dopo la prima esecuzione. Nota: avevo eseguito test precedenti utilizzando ICommonStructureService3 (nuovo in API TFS 2010) e lo stesso codice era più lento degli altri due metodi.

Se la prestazione costante è la chiave, penso che raccomanderei VersionControlServer per farlo.

Tenete a mente cosa volete fare con i progetti del team, comunque. Se semplicemente elencarli è tutto ciò che serve, l'ICSS è probabilmente la strada da percorrere. Se si desidera utilizzare l'elenco per la navigazione, è necessario anche il percorso ($/TeamProject) o Uri. In tal caso, VCS è probabilmente il modo migliore per andare, poiché è possibile utilizzare la proprietà ServerItem, che contiene il percorso dell'elemento. Si potrebbe anche ottenere una semplice concatenazione di stringhe usando ICSS ("$/" + p.Name).

Spero che questo aiuti alcuni altri sviluppatori di API TFS.

+0

Sebbene l'argomento riguardi le prestazioni, si noti che 'VersionControlServer' non elenca sempre tutti i progetti di team. Questo potrebbe dipendere dal fatto che il progetto usi il controllo del codice sorgente. –

risposta

8

Guardando le tue statistiche, non vedo il vantaggio di trovare il più veloce. Sembrano tutti chiaramente incredibilmente veloci. Potrebbe essere la pre-programmazione rispetto all'ottimizzazione?