public static PerformanceResult RunConcurrentPerformanceTest(int numIterations, int degreeParallelism, Action operation) { int i; var taskList = new Task<PerformanceResult>[degreeParallelism]; long startTime = HiResTimer.Ticks; int subIterations = numIterations/degreeParallelism; for (i = 0; i < degreeParallelism; i++) { var t = new Task<PerformanceResult>(() => RunPerformanceTest(subIterations, operation, true)); taskList[i] = t; } for (i = 0; i < degreeParallelism; i++) taskList[i].Start(); Task.WaitAll(taskList); long stopTime = HiResTimer.Ticks; var rawData = new List<double>(); for (i = 0; i < degreeParallelism; i++) { rawData.AddRange(taskList[i].Result.DescriptiveResult.RawData); } var desc = new DescriptiveAnalysis(rawData); desc.Analyze(false); desc.AnalyzeHistogram(cHistogramBuckets); var res = new PerformanceResult { IsValid = true, Iterations = taskList.Sum(p => p.Result.Iterations), DegreeOfParallelism = degreeParallelism, TotalMilliseconds = ConvertToMs(startTime, stopTime), TotalSeconds = ConvertToSeconds(startTime, stopTime), TotalTicks = stopTime - startTime, DescriptiveResult = desc.Result }; for (i = 0; i < degreeParallelism; i++) taskList[i].Dispose(); return res; }
public static PerformanceResult RunConcurrentPerformanceTest(int numIterations, int degreeParallelism, Func<bool> operation) { int i; var taskList = new Task<PerformanceResult>[degreeParallelism]; int subIterations = numIterations/degreeParallelism; for (i = 0; i < degreeParallelism; i++) { var t = new Task<PerformanceResult>(() => RunPerformanceTest(subIterations, operation, true)); taskList[i] = t; } for (i = 0; i < degreeParallelism; i++) taskList[i].Start(); Task.WaitAll(taskList); var rawData = new List<double>(); bool valid = true; for (i = 0; i < degreeParallelism; i++) { valid &= taskList[i].Result.IsValid; rawData.AddRange(taskList[i].Result.DescriptiveResult.RawData); } var desc = new DescriptiveAnalysis(rawData); desc.Analyze(false); desc.AnalyzeHistogram(cHistogramBuckets); var res = new PerformanceResult { IsValid = valid, TotalMilliseconds = taskList.Max(p => p.Result.TotalMilliseconds), TotalSeconds = taskList.Max(p => p.Result.TotalSeconds), TotalTicks = taskList.Max(p => p.Result.TotalTicks), DescriptiveResult = desc.Result }; for (i = 0; i < degreeParallelism; i++) taskList[i].Dispose(); return res; }
private void RunSITests() { _dictResult = PerformancePatterns.RunPerformanceTest(cMinPerfIterations, (() => { var ndx = _intKeys[_rng.Next(0, _intKeys.Count)]; string desc; DataRow[] rows = _intDataTable.Select(String.Format("codeColumn = {0}", ndx)); if (rows.Length > 0) desc = rows[0]["valueColumn"].ToString(); })); Console.WriteLine(cResultFormat + " with int-keyed DataTable.", cMinPerfIterations, _dictResult.TotalMilliseconds, _dictResult.TotalSeconds); _tableResult = PerformancePatterns.RunPerformanceTest(cMinPerfIterations, (() => { var ndx = _stringKeys[_rng.Next(0, _stringKeys.Count)]; string desc; DataRow[] rows = _stringDataTable.Select("codeColumn = '" + ndx + "'"); if (rows.Length > 0) desc = rows[0]["valueColumn"].ToString(); })); Console.WriteLine(cResultFormat + " with string-keyed DataTable.", cMinPerfIterations, _tableResult.TotalMilliseconds, _tableResult.TotalSeconds); }
private void RunStringTests() { _dictResult = PerformancePatterns.RunPerformanceTest(cMinPerfIterations, (() => { var ndx = _stringKeys[_rng.Next(0, _stringKeys.Count)]; string desc; _dictionary.TryGetValue(ndx, out desc); })); Console.WriteLine(cResultFormat + " with dictionary.", cMinPerfIterations, _dictResult.TotalMilliseconds, _dictResult.TotalSeconds); _tableResult = PerformancePatterns.RunPerformanceTest(cMinPerfIterations, (() => { var ndx = _stringKeys[_rng.Next(0, _stringKeys.Count)]; string desc; DataRow[] rows = _stringDataTable.Select("codeColumn = '" + ndx + "'"); if (rows.Length > 0) desc = rows[0]["valueColumn"].ToString(); })); Console.WriteLine(cResultFormat + " with DataTable.", cMinPerfIterations, _tableResult.TotalMilliseconds, _tableResult.TotalSeconds); }
public void PrintResult(PerformanceResult res) { Console.WriteLine(res.ToString()); }