Currently showing entries with the tag: enhancements

page 1 of 1
1 

Simple Speed Testing in .NET - System.Diagnostics.Stopwatch

August 18, 2007 • 6:48AM • permalink
One of the biggest problems with the .NET Framework is that so many new features are released with each major version that minor additions and features usually slip through the cracks. In my experience, very few classes have been overlooked during the transition from 1.1 to 2.0 as much as the Stopwatch class (System.Diagnostics.Stopwatch).

This is a replacement for what most people probably do to test two different blocks of code that perform the same action and compare the speed between them. The process usually goes something like: log the current time, run the test, take the difference between the current time and your logged time, rinse, repeat.

As an alternative, the Stopwatch class was built using low-level API calls, with less overhead than other .NET methods. If the hardware and Windows version of the computer support a high-resolution performance counter, it will use this counter instead of the standard PC clock.

Here is a simple example:


using System.Diagnostics;
//Note: make sure you have this at the top of the class




Stopwatch sw = new Stopwatch();

//do any preliminary processing here, to not inflate your test results

string s1 = "";
string s2 = "";
string letters = "abcdefghijklmnopqrstuvwxyz";
int iterations = 50000;


//TEST 1

sw.Start();

for (int i = 0; i < iterations; ++i)
   s1 += letters[i % 26];

sw.Stop();

//END - TEST 1

Response.Write("Test 1: " + sw.ElapsedMilliseconds + "ms");
//note that you can also use sw.ElapsedTicks



sw.Reset();
//Don't forget to reset the Stopwatch before your second test!!!


//TEST 2

sw.Start();

for (int i = 0; i < iterations; ++i)
   string.Concat(s2, letters[i % 26]);

sw.Stop();

//END - TEST 2

Response.Write(" | Test 2: " + sw.ElapsedMilliseconds + "ms");



As it mentions above, don't forget to Reset your Stopwatch between tests or your subsequent tests will have their times inflated (since otherwise the Stopwatch will continue incrementing from the point that it was stopped).

The Stopwatch has a few other useful methods and properties, such as IsRunning and IsHighResolution. You can view the MSDN description of the Stopwatch class here.


In case you're curious, the string.Concat function outperformed the += operator by over 550 times in repeated tests on my machine. This is due to the fact that the += creates multiple (immutable) string objects, while the string.Concat uses a buffer technique to avoid that. More to come on this topic in a future post.





page 1 of 1
1 




Tags

programming mathematics software Python ASP internals AlternativeNicheNetwork launch dynamic block Microsoft Windows HTTP SQL Server languages RegEx concurrency Flash class Regular Expressions type web development AnimeDates c plus plus bitwise interface technology utility reflection anime programming languages Javascript JSP Mikomicon PC shortcut job Linux MSDN love SQL Server 2000 Visual Basic VB Introduction new site functional programming book review client-side MySql protocol Adrianne enhancements