Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Time elapsed between two functions

Tags:

c#

algorithm

time

I need to find the time elapsed between two functions doing the same operation but written in different algorithm. I need to find the fastest among the two

Here is my code snippet

Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine(sample.palindrome()); // algorithm 1
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);//tried sw.elapsed and sw.elapsedticks
sw.Reset(); //tried with and without reset
sw.Start();
Console.WriteLine(sample.isPalindrome()); //algorithm 2
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

Technically this should give the time taken for two algorithms. This gives that the algorithm 2 is faster. But it gives different time if I interchange the calling of two function. Like if I call algorithm2 first and algorithm1 second it says algorithm1 is faster.

I dont know what I am doing wrong.

like image 596
samnaction Avatar asked Dec 15 '14 06:12

samnaction


People also ask

How to calculate elapsed time between two time points in Excel?

Step 1) Enter the date and time you want to start from. Note: if you only want to work out the elapsed time between two time points on the same day, then just fill in the time boxes and ignore the date ones. Step 2) Enter the date and time you want to go to.

How does the elapsed time calculator work?

Elapsed Time Calculator - Converting into months. The calculator calculates the time interval between two dates and times, changing it into a variety of formats. If your time period is longer than one month then please read the next part below!

How to round up the elapsed time between dates in Excel?

The INT function rounds up numbers in excel. We can use this function to get the elapsed time between dates. Follow the steps below to apply this method. You will get the number of elapsed days between the dates rounded up as follows. With the help of the TEXT function, you can change the formatting of the elapsed time.

How do you find the time between two dates?

Time Between Two Dates. Use this time and date duration calculator to find out the number of days, hours, minutes, and seconds between the times on two different dates. To add or subtract time from a date, use the Time Calculator. .


Video Answer


3 Answers

I assume your palindrome methods runs extremely fast in this example and therefore in order to get a real result you will need to run them a couple of times and then decide which is faster.
Something like this:

int numberOfIterations = 1000; // you decide on a reasonable threshold.
sample.palindrome(); // Call this the first time and avoid measuring the JIT compile time
Stopwatch sw = new Stopwatch();
sw.Start();
for(int i = 0 ; i < numberOfIterations ; i++)
{
   sample.palindrome(); // why console write?
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); // or sw.ElapsedMilliseconds/numberOfIterations 

Now do the same for the second method and you will get more realistic results.

like image 129
Amir Popovich Avatar answered Sep 24 '22 07:09

Amir Popovich


What you must do is execute both methods before the actual calculated tests for the compiled code to be JIT'd. Then test with multiple tries. Here is a code mockup.

The compiled code in CIL format will be JIT'd upon first execution, it will be translated into machine code. So testing it at first is in-accurate. So let the code be JIT'd before actually testing it.

sample.palindrome();
sample.isPalindrome();
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
    sample.palindrome();
    Console.WriteLine("palindrome test #{0} result: {1}", i, sw.ElapsedMilliseconds);
}
sw.Stop();
Console.WriteLine("palindrome test Final result: {0}", sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < 1000; i++)
{
    sample.isPalindrome();
    Console.WriteLine("isPalindrome test #{0} result: {1}", i, sw.ElapsedMilliseconds);
}
sw.Stop();
Console.WriteLine("isPalindrome test Final result: {0}", sw.ElapsedMilliseconds);

Read more about CIL and JIT

like image 8
DevEstacion Avatar answered Sep 22 '22 07:09

DevEstacion


Unless you provide the code of palindrome and isPalindrome function along with the sample class, I can't do much except speculate.

The most likely reason which I guess for this is that both your functions use the same class variables and other data. So when you call the function for the first time, it has to allocate memory to the variables, whereas the next time you call some other function, those one time expenses have already occurred. If not variables, it could be some other matter, but along the same lines.

I suggest that you call both the functions twice, and note the duration only the second time a function is called, so that any resources which they need to use may have been allocated once, and there's lesser probability of something behind the scenes messing with the result.

Let me know if this works. This is mere speculation on my part, and I may be wrong.

like image 4
therainmaker Avatar answered Sep 24 '22 07:09

therainmaker