SIGN UP MEMBER LOGIN:    
Resource

StopWatch in C#

John Arcadella Resources Mar 24, 2011
The StopWatch class in .NET Framework is used to measure the elapsed time accurately.
The StopWatch class in .NET Framework is used to measure the elapsed time accurately.

The class provides Start, Stop, StartNew, Reset, Restart and GetTimestamp methods.


using System;

using System.Diagnostics;

 

namespace StopWatchSample

{

    class OperationsTimer

    {

        public static void Main()

        {

            DisplayTimerProperties();

 

            Console.WriteLine();

            Console.WriteLine("Press the Enter key to begin:");

            Console.ReadLine();

            Console.WriteLine();

 

            TimeOperations();

        }

 

        public static void DisplayTimerProperties()

        {

            // Display the timer frequency and resolution.

            if (Stopwatch.IsHighResolution)

            {

                Console.WriteLine("Operations timed using the system's high-resolution performance counter.");

            }

            else

            {

                Console.WriteLine("Operations timed using the DateTime class.");

            }

 

            long frequency = Stopwatch.Frequency;

            Console.WriteLine("  Timer frequency in ticks per second = {0}",

                frequency);

            long nanosecPerTick = (1000L*1000L*1000L) / frequency;

            Console.WriteLine("  Timer is accurate within {0} nanoseconds",

                nanosecPerTick);

        }

 

        private static void TimeOperations()

        {

            long nanosecPerTick = (1000L*1000L*1000L) / Stopwatch.Frequency;

            const long numIterations = 10000;

 

            // Define the operation title names.

            String [] operationNames = {"Operation: Int32.Parse(\"0\")",

                                           "Operation: Int32.TryParse(\"0\")",

                                           "Operation: Int32.Parse(\"a\")",

                                           "Operation: Int32.TryParse(\"a\")"};

 

 

            // Time four different implementations for parsing

            // an integer from a string.

 

            for (int operation = 0; operation <= 3; operation++)

            {

                // Define variables for operation statistics.

                long numTicks = 0;

                long numRollovers = 0;

                long maxTicks = 0;

                long minTicks = Int64.MaxValue;

                int indexFastest = -1;

                int indexSlowest = -1;

                long milliSec = 0;

 

                Stopwatch time10kOperations = Stopwatch.StartNew();

 

                // Run the current operation 10001 times.

                // The first execution time will be tossed

                // out, since it can skew the average time.

 

                for (int i=0; i<=numIterations; i++)

                {

                    long ticksThisTime = 0;

                    int inputNum;

                    Stopwatch timePerParse;

 

                    switch (operation)

                    {

                        case 0:

                            // Parse a valid integer using

                            // a try-catch statement.

 

                            // Start a new stopwatch timer.

                            timePerParse = Stopwatch.StartNew();

 

                            try

                            {

                                inputNum = Int32.Parse("0");

                            }

                            catch (FormatException)

                            {

                                inputNum = 0;

                            }

 

                            // Stop the timer, and save the

                            // elapsed ticks for the operation.

 

                            timePerParse.Stop();

                            ticksThisTime = timePerParse.ElapsedTicks;

                            break;

                        case 1:

                            // Parse a valid integer using

                            // the TryParse statement.

 

                            // Start a new stopwatch timer.

                            timePerParse = Stopwatch.StartNew();

 

                            if (!Int32.TryParse("0", out inputNum))

                            {

                                inputNum = 0;

                            }

 

                            // Stop the timer, and save the

                            // elapsed ticks for the operation.

                            timePerParse.Stop();

                            ticksThisTime = timePerParse.ElapsedTicks;

                            break;

                        case 2:

                            // Parse an invalid value using

                            // a try-catch statement.

 

                            // Start a new stopwatch timer.

                            timePerParse = Stopwatch.StartNew();

 

                            try

                            {

                                inputNum = Int32.Parse("a");

                            }

                            catch (FormatException)

                            {

                                inputNum = 0;

                            }

 

                            // Stop the timer, and save the

                            // elapsed ticks for the operation.

                            timePerParse.Stop();

                            ticksThisTime = timePerParse.ElapsedTicks;

                            break;

                        case 3:

                            // Parse an invalid value using

                            // the TryParse statement.

 

                            // Start a new stopwatch timer.

                            timePerParse = Stopwatch.StartNew();

 

                            if (!Int32.TryParse("a", out inputNum))

                            {

                                inputNum = 0;

                            }

 

                            // Stop the timer, and save the

                            // elapsed ticks for the operation.

                            timePerParse.Stop();

                            ticksThisTime = timePerParse.ElapsedTicks;

                            break;

 

                        default:

                            break;

                    }

 

                    // Skip over the time for the first operation,

                    // just in case it caused a one-time

                    // performance hit.

                    if (i == 0)

                    {

                        time10kOperations.Reset();

                        time10kOperations.Start();

                    }

                    else

                    {

 

                        // Update operation statistics

                        // for iterations 1-10001.

                        if (maxTicks < ticksThisTime)

                        {

                            indexSlowest = i;

                            maxTicks = ticksThisTime;

                        }

                        if (minTicks > ticksThisTime)

                        {

                            indexFastest = i;

                            minTicks = ticksThisTime;

                        }

                        numTicks += ticksThisTime;

                        if (numTicks < ticksThisTime)

                        {

                            // Keep track of rollovers.

                            numRollovers ++;

                        }

                    }

                } 

 

                // Display the statistics for 10000 iterations.

 

                time10kOperations.Stop();

                milliSec = time10kOperations.ElapsedMilliseconds;

 

                Console.WriteLine();

                Console.WriteLine("{0} Summary:", operationNames[operation]);

                Console.WriteLine("  Slowest time:  #{0}/{1} = {2} ticks",

                    indexSlowest, numIterations, maxTicks);

                Console.WriteLine("  Fastest time:  #{0}/{1} = {2} ticks",

                    indexFastest, numIterations, minTicks);

                Console.WriteLine("  Average time:  {0} ticks = {1} nanoseconds",

                    numTicks / numIterations,

                    (numTicks * nanosecPerTick) / numIterations );

                Console.WriteLine("  Total time looping through {0} operations: {1} milliseconds",

                    numIterations, milliSec);

            }

        }

     }

}

 


share this resource :
post comment
 
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Sponsored by
Nevron Gauge for SharePoint
Become a Sponsor