2010-09-01 9 views
26

¡Tengo algunas respuestas! Siéntase libre de contribuir con sus propios hallazgos.¿Cuál es el método más rápido para recuperar proyectos del equipo TFS utilizando la API TFS SDK?

Por lo que yo sé, hay 3 formas principales para recuperar una simple lista de proyectos de equipo de TFS:

  • utilizando el nuevo servicio de catálogo (TFS 2010)
  • Utilizando el VersionControlServer (TFS 2008/2010)
  • Uso de la ICommonStructureService (TFS 2008/2010)

los simples pruebas que realicé compararon los tres métodos al contar el número total de proyectos regresó.

Método 1: Servicio de Catálogo (TFS 2010 Solamente)

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

Método 2: VersionControlServer

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

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

Método 3: ICommonStructureService

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

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

Las pruebas de unidad que ejecuté fueron súper simples. Usé el método .Count() para asegurarme de que iteramos todos los proyectos del equipo (.Any() es más rápido ya que se detendrá después de que se devuelva el primer nombre).

Resultados

Para TFS 2010, corriendo 3 pruebas 5 veces seguidas:

TFS 2010 Chart Average Duration

TFS 2010 Duration Results

Para TFS 2008, corriendo 2 pruebas (sin servicio de catálogo) 5 veces seguidas:

TFS 2008 Chart Average Duration

TFS 2008 Duration Results

sesgos

  • El servidor de TFS 2010 esta estaba corriendo contra estaba en desarrollo, por lo que casi nadie lo estaba usando.
  • No probé esto con ninguna cuenta de usuario de privilegios mínimos; Soy un administrador en el servidor.
  • Me estoy comunicando con un servidor TFS dentro de la red corporativa.
  • En TFS 2010, puede tener múltiples TfsTeamProjectCollections; necesitarás iterar a través de ellos también. En esta prueba, solo usé una colección.
  • Utilicé el constructor para crear el TfsTeamProjectCollection; Cambié a usar el método TfsTeamProjectCollectionFactory.GetTeamProjectCollection() y en realidad fue más lento cada prueba. Puede ser más rápido si realiza múltiples llamadas por solicitud.
  • Para TFS 2008, el servidor es un servidor de producción bajo carga (es decir, en el mundo real).

hallazgos

Como se puede ver, parece que el ICommonStructureService es bastante rápido a la búsqueda de todo el Equipo de Proyectos tras la primera ejecución. Nota: He hecho pruebas anteriores usando ICommonStructureService3 (nuevo en TFS 2010 API) y el mismo código fue más lento que los otros dos métodos.

Si el rendimiento constante es la clave, creo que recomendaría VersionControlServer para hacerlo.

Sin embargo, tenga en cuenta qué es lo que quiere hacer con los proyectos del equipo. Si simplemente lo enumera es todo lo que necesita, el ICSS es probablemente el camino a seguir. Si desea utilizar la lista para la navegación, también necesitará la ruta ($/TeamProject) o Uri. En ese caso, VCS es probablemente la mejor manera de hacerlo ya que puede usar la propiedad ServerItem, que contiene la ruta al artículo. También puede salirse con la concatenación de cadenas simples usando ICSS ("$/" + p.Name).

Espero que esto ayude a otros desarrolladores de API de TFS.

+0

Aunque el tema implica rendimiento, tenga en cuenta que 'VersionControlServer' no siempre enumera todos los proyectos del equipo. Esto podría tener que ver con si el proyecto usa control de fuente. –

Respuesta

8

En cuanto a sus estadísticas, no veo el beneficio de encontrar el más rápido. Todos parecen claramente increíblemente rápidos. ¿Podría ser esto una preprogramación sobre la optimización?

Cuestiones relacionadas