From d57ce6042584cae7fe34f61f379dc2080bb74274 Mon Sep 17 00:00:00 2001 From: WilliamRoxit Date: Mon, 4 Jan 2016 12:58:01 +0100 Subject: [PATCH] Performance optimization The TFS API for querying build information was slowing TFS down because of the performance impact. I investigated this issue 2 years ago when i made my own build monitor. By specifying the InformationTypes and QueryOptions to the minimum needed, the load on the TFS server can be reduced dramatically. --- .../OrbitOne.BuildScreen.Services.Tfs/TfsService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OrbitOne.BuildScreen/OrbitOne.BuildScreen.Services.Tfs/TfsService.cs b/OrbitOne.BuildScreen/OrbitOne.BuildScreen.Services.Tfs/TfsService.cs index 401bc7d..0ce6e92 100644 --- a/OrbitOne.BuildScreen/OrbitOne.BuildScreen.Services.Tfs/TfsService.cs +++ b/OrbitOne.BuildScreen/OrbitOne.BuildScreen.Services.Tfs/TfsService.cs @@ -185,6 +185,8 @@ private IBuildDetail GetBuild(IBuildServer buildServer, CatalogNode teamProjectN buildDetailSpec.MaxBuildsPerDefinition = 1; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec.MinFinishTime = filterDate; + buildDetailSpec.InformationTypes = null; + buildDetailSpec.QueryOptions = QueryOptions.Definitions | QueryOptions.BatchedRequests; build = buildServer.QueryBuilds(buildDetailSpec).Builds.FirstOrDefault(); } @@ -207,6 +209,8 @@ private TimeSpan GetLastSuccesfulBuildTime(IBuildServer buildServer, CatalogNode inProgressBuildDetailSpec.Status = BuildStatus.Succeeded; inProgressBuildDetailSpec.MaxBuildsPerDefinition = 1; inProgressBuildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; + inProgressBuildDetailSpec.InformationTypes = null; + inProgressBuildDetailSpec.QueryOptions = QueryOptions.None; var lastSuccesfulBuild = buildServer.QueryBuilds(inProgressBuildDetailSpec).Builds.FirstOrDefault();