/// <summary> /// Creates a new QueryMetrics that is the sum of all elements in an IEnumerable. /// </summary> /// <param name="queryMetricsList">The IEnumerable to aggregate.</param> /// <returns>A new QueryMetrics that is the sum of all elements in an IEnumerable.</returns> internal static QueryMetrics CreateFromIEnumerable(IEnumerable <QueryMetrics> queryMetricsList) { if (queryMetricsList == null) { throw new ArgumentNullException("queryMetricsList"); } long retrievedDocumentCount = 0; long retrievedDocumentSize = 0; long outputDocumentCount = 0; long outputDocumentSize = 0; long indexHitDocumentCount = 0; TimeSpan totalQueryExecutionTime = new TimeSpan(); List <QueryPreparationTimes> queryPreparationTimesList = new List <QueryPreparationTimes>(); TimeSpan indexLookupTime = new TimeSpan(); TimeSpan documentLoadTime = new TimeSpan(); TimeSpan vmExecutionTime = new TimeSpan(); List <RuntimeExecutionTimes> runtimeExecutionTimesList = new List <RuntimeExecutionTimes>(); TimeSpan documentWriteTime = new TimeSpan(); List <ClientSideMetrics> clientSideMetricsList = new List <ClientSideMetrics>(); foreach (QueryMetrics queryMetrics in queryMetricsList) { if (queryMetrics == null) { throw new ArgumentNullException("queryMetricsList can not have null elements"); } retrievedDocumentCount += queryMetrics.retrievedDocumentCount; retrievedDocumentSize += queryMetrics.retrievedDocumentSize; outputDocumentCount += queryMetrics.outputDocumentCount; outputDocumentSize += queryMetrics.outputDocumentSize; indexHitDocumentCount += queryMetrics.indexHitDocumentCount; totalQueryExecutionTime += queryMetrics.totalQueryExecutionTime; queryPreparationTimesList.Add(queryMetrics.queryPreparationTimes); indexLookupTime += queryMetrics.indexLookupTime; documentLoadTime += queryMetrics.documentLoadTime; vmExecutionTime += queryMetrics.vmExecutionTime; runtimeExecutionTimesList.Add(queryMetrics.runtimeExecutionTimes); documentWriteTime += queryMetrics.documentWriteTime; clientSideMetricsList.Add(queryMetrics.clientSideMetrics); } return(new QueryMetrics( retrievedDocumentCount, retrievedDocumentSize, outputDocumentCount, outputDocumentSize, indexHitDocumentCount, totalQueryExecutionTime, QueryPreparationTimes.CreateFromIEnumerable(queryPreparationTimesList), indexLookupTime, documentLoadTime, vmExecutionTime, RuntimeExecutionTimes.CreateFromIEnumerable(runtimeExecutionTimesList), documentWriteTime, ClientSideMetrics.CreateFromIEnumerable(clientSideMetricsList))); }
/// <summary> /// Creates a new QueryMetrics that is the sum of all elements in an IEnumerable. /// </summary> /// <param name="queryMetricsList">The IEnumerable to aggregate.</param> /// <returns>A new QueryMetrics that is the sum of all elements in an IEnumerable.</returns> internal static QueryMetrics CreateFromIEnumerable(IEnumerable <QueryMetrics> queryMetricsList) { if (queryMetricsList == null) { throw new ArgumentNullException("queryMetricsList"); } List <Guid> activityIds = new List <Guid>(); long retrievedDocumentCount = 0; long retrievedDocumentSize = 0; long outputDocumentCount = 0; long outputDocumentSize = 0; long indexHitDocumentCount = 0; TimeSpan totalQueryExecutionTime = new TimeSpan(); List <QueryPreparationTimes> queryPreparationTimesList = new List <QueryPreparationTimes>(); TimeSpan indexLookupTime = new TimeSpan(); TimeSpan documentLoadTime = new TimeSpan(); TimeSpan vmExecutionTime = new TimeSpan(); List <RuntimeExecutionTimes> runtimeExecutionTimesList = new List <RuntimeExecutionTimes>(); TimeSpan documentWriteTime = new TimeSpan(); List <ClientSideMetrics> clientSideMetricsList = new List <ClientSideMetrics>(); foreach (QueryMetrics queryMetrics in queryMetricsList) { if (queryMetrics == null) { throw new ArgumentNullException("queryMetricsList can not have null elements"); } activityIds = activityIds.Concat(queryMetrics.ActivityIds.Where((activityId) => activityId != Guid.Empty)).ToList(); retrievedDocumentCount += queryMetrics.RetrievedDocumentCount; retrievedDocumentSize += queryMetrics.RetrievedDocumentSize; outputDocumentCount += queryMetrics.OutputDocumentCount; outputDocumentSize += queryMetrics.OutputDocumentSize; indexHitDocumentCount += queryMetrics.IndexHitDocumentCount; totalQueryExecutionTime += queryMetrics.TotalQueryExecutionTime; queryPreparationTimesList.Add(queryMetrics.QueryPreparationTimes); indexLookupTime += queryMetrics.IndexLookupTime; documentLoadTime += queryMetrics.DocumentLoadTime; vmExecutionTime += queryMetrics.VMExecutionTime; runtimeExecutionTimesList.Add(queryMetrics.RuntimeExecutionTimes); documentWriteTime += queryMetrics.DocumentWriteTime; clientSideMetricsList.Add(queryMetrics.ClientSideMetrics); } return(new QueryMetrics( activityIds, retrievedDocumentCount, retrievedDocumentSize, outputDocumentCount, outputDocumentSize, indexHitDocumentCount, totalQueryExecutionTime, QueryPreparationTimes.CreateFromIEnumerable(queryPreparationTimesList), indexLookupTime, documentLoadTime, vmExecutionTime, RuntimeExecutionTimes.CreateFromIEnumerable(runtimeExecutionTimesList), documentWriteTime, ClientSideMetrics.CreateFromIEnumerable(clientSideMetricsList))); }