/// <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)));
        }
Ejemplo n.º 2
0
        /// <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)));
        }