Kuriyama Mirai
Kuriyama Mirai

Reputation: 937

Time duration,time start and time end of a method in C#

how can I record the time duration, time start and time end of a method once it was executed using c#?

for example, I click a button and it will do something. Once it start, I'll get the start time, then when the execution is done, I'll get the time end and also the duration of time it take to finish.

Upvotes: 6

Views: 30313

Answers (4)

Kuriyama Mirai
Kuriyama Mirai

Reputation: 937

I've done it by doing this

var watch = System.Diagnostics.Stopwatch.StartNew();
string startTime = DateTime.Now.ToLongTimeString();

//Insert Code Here

watch.Stop();
string timeEnd = DateTime.Now.ToLongTimeString();

//Time Format
string[] hours = watch.Elapsed.TotalHours.ToString().Split('.');
string[] minutes = watch.Elapsed.TotalMinutes.ToString().Split('.');
string[] seconds = watch.Elapsed.TotalSeconds.ToString().Split('.');
string[] milliseconds = watch.Elapsed.TotalMilliseconds.ToString().Split('.');

MessageBox.Show(hours[0].ToString() + ":" + minutes[0].ToString() + ":" + seconds[0].ToString() + "." + milliseconds[0].ToString());

Upvotes: 2

Complexity
Complexity

Reputation: 5820

First, you need to create a stopwatch object.

private readonly Stopwatch stopwatch = new Stopwatch();

Then, your method:

public void MyMethod()
{
    stopwatch.Start();

    // Any other code here.

    stopwatch.Stop();

    //returns longs
    long runningTimeInMs = stopwatch.ElapsedMilliseconds;
}

Upvotes: 1

schei1
schei1

Reputation: 2487

You can use the Stopwatch, which resides in System.Diagnostics namespace.

This has the features of a normal stopwatch, with Start, Stop, Reset, ElapsedMilliseconds and so forth.

This is great for measuring a specific code block or method. You do however state that you want both start and end time in addition to the duration of execution. You could create a custom stopwatch by inheriting the Stopwatch class and extending it with a couple of DateTime properties.

public class CustomStopwatch : Stopwatch
    {

        public DateTime? StartAt { get; private set; }
        public DateTime? EndAt { get; private set; }


        public void Start()
        {
            StartAt = DateTime.Now;

            base.Start();
        }

        public void Stop()
        {
            EndAt = DateTime.Now;

            base.Stop();
        }

        public void Reset()
        {
            StartAt = null;
            EndAt = null;

            base.Reset();
        }

        public void Restart()
        {
            StartAt = DateTime.Now;
            EndAt = null;

            base.Restart();
        }

    }

And use it like this:

CustomStopwatch sw = new CustomStopwatch();
sw.Start();
Thread.Sleep(2342); // just to use some time, logic would be in here somewhere.
sw.Stop();
Console.WriteLine("Stopwatch elapsed: {0}, StartAt: {1}, EndAt: {2}", sw.ElapsedMilliseconds, sw.StartAt.Value, sw.EndAt.Value);

Upvotes: 11

Rajneesh Rai
Rajneesh Rai

Reputation: 96

You can use System.Diagnostics.Stopwatch class to achieve this. see the sample

            // Create new stopwatch
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            // Begin timing
            stopwatch.Start();

            // Tasks performed by method

            // Stop timing
            stopwatch.Stop();

            Console.WriteLine("Time taken : {0}", stopwatch.Elapsed);

Upvotes: 6

Related Questions