/// <summary> /// Gets the response time (in millisec) for the engine to process the given file. /// </summary> /// <param name="filePath">The file you are testing</param> /// <returns>measurement in milliseconds</returns> internal static long GetResponseTimeForFile(IContentScanner scanner, string filePath, ProcessLevel level, RunAt runAt) { using (var cs = new ContractSerialization()) { Request request = cs.LoadRequest(filePath); Response response = null; TimeSpan timeSpan = Measure(delegate() { response = scanner.Scan(request, null, level, runAt); }); AssertValidResponse(response); //Essential to validate, but it should not be part of what is timed. return Convert.ToInt64(timeSpan.TotalMilliseconds); } }
internal static ResultStat[] MeasureFolder(IContentScanner scanner, string basePath, ProcessLevel scanLevel, RunAt runAt) { FileInfo[] requestFiles = new DirectoryInfo(basePath).GetFiles("*.xml", SearchOption.AllDirectories); Assert.IsTrue(requestFiles.Length > 0); List<ResultStat> resultStats = new List<ResultStat>(); //do it twice, take the second result. for (int i = 0; i < 2; ++i) { long totalBytes = 0; List<long> results = new List<long>(); foreach (FileInfo requestFile in requestFiles) { long responseTime = PerfTestHelp.GetResponseTimeForFile(scanner, requestFile.FullName, scanLevel, runAt); results.Add(responseTime); totalBytes += PerfTestHelp.GetRequestSizeInBytes(requestFile); } //JIT paranoia. //For consistency, disregard the first iteration of every test. if (i > 0) { long totalMillisec = 0; results.ForEach(delegate(long responseTime) { totalMillisec += responseTime; }); resultStats.Add(new ResultStat(totalMillisec, requestFiles.Length, totalBytes)); } } return resultStats.ToArray(); }