public static void MeasureMultipleCalls()
        {
            var traceContext     = new TraceContext();
            var testMethodRunner = new TestMethods();

            testMethodRunner.Test1000(traceContext, 100);
            testMethodRunner.Test1000(traceContext, 200);
            testMethodRunner.Test1000(traceContext, 300);

            Console.WriteLine(traceContext.ToString());
        }
        public static void MeasureMultipleCallsInThreads(int threadsCount, int totalSeconds)
        {
            var traceContext = new TraceContext();

            StartThreads(threadsCount, traceContext);
            Thread.Sleep(totalSeconds * 1000);
            StopThreads(traceContext);

            var summary = new TraceSummary();

            Console.WriteLine(summary.PrintReport(traceContext));
        }
        private static void StartThreads(int threadsCount, TraceContext traceContext)
        {
            InProgress = true;
            Threads    = new Thread[threadsCount];

            for (var i = 0; i < threadsCount; i++)
            {
                var thread = new Thread(RunRandomMethods);
                thread.Start(traceContext);
                Threads[i] = thread;
            }
        }
        private static void StopThreads(TraceContext traceContext)
        {
            InProgress = false;

            for (var i = 0; i < Threads.Length; i++)
            {
                Threads[i].Abort();
            }

            TraceItem[] traceItems;
            lock (traceContext.TraceItemsList)
            {
                traceItems = traceContext.TraceItemsList.ToArray();
            }

            foreach (var item in traceItems)
            {
                if (!item.IsStopped)
                {
                    item.Cancel();
                }
            }
        }