Click here to Skip to main content
Click here to Skip to main content

Which code runs faster? The answer may surprise you....

By , 25 Feb 2013
 

I saw some code that piqued my interest a few days ago. Basically, this code compared object types instead of the name for the object type.  Being the developer that I am, it set me to thinking about which way is faster.  Here are a couple of routines that do the exact same thing. Which one do you think will run faster? This code is targeted for .NET 4 Client, but should also work in .NET 2 and later.

The StopWatch objects (oStopWatchA and oStopWatchB) are defined as Class level private System.Diagnostics.Stopwatch objects and initialized before the call to the Subs.  The Object object (oObject) is defined as a Class level private System.Object object and initialized before the call to the Subs.  Each routine was run 1,000 times, swapping with each execution to eliminate external factors to the timing.

Private Sub CompareA()
  Dim iLoop As Integer

  oStopWatchA.Start()
  For iLoop = 1 To 1000000
    Select Case oObject.GetType().Name
      Case "Object"
      Case "Exception"
      Case Else
    End Select
  Next
  oStopWatchA.Stop()
End Sub
Private Sub CompareB()
  Dim iLoop As Integer

  oStopWatchB.Start()
  For iLoop = 1 To 1000000
    Select Case oObject.GetType()
      Case GetType(Object)
      Case GetType(Exception)
      Case Else
    End Select
  Next
  oStopWatchB.Stop()
End Sub

The elapsed time for each is listed below (lower numbers are better):

RoutineElapsed Time (seconds)
CompareA32.9136874
CompareB7.7228856

Were you surprised? I was!

Edit: The whole point of this article is to not just do the same thing the same way you always have.  Look at other methods to accomplish your goal.  I was surprised by the speed difference of changing the comparison from a string to a type reference, mainly because I expected the compiler to be able to generate code that pulled the type's name once for the comparison.  I was also expecting the GetType() calls to be executed on every comparison (each Case statement).  

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Adam Zuckerman
Software Developer (Senior)
United States United States
Member
Long time software engineer who rambles occasionally about coding, best practices, and other random things.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionsurprising ^_*memberBesSo W Bas20 Mar '13 - 2:21 
QuestionokmemberCIDev14 Mar '13 - 5:17 
GeneralMy vote of 1memberWilliam E. Kempf25 Feb '13 - 11:02 
GeneralRe: My vote of 1memberAdam Zuckerman25 Feb '13 - 11:55 
GeneralRe: My vote of 1memberPIEBALDconsult25 Feb '13 - 12:55 
QuestionWRONGmemberMember 970941720 Feb '13 - 8:32 
AnswerRe: WRONGmemberPIEBALDconsult25 Feb '13 - 12:31 
GeneralMy vote of 3memberAnDev201320 Feb '13 - 6:52 
QuestionYou're surprized?memberMatt T Heffron19 Feb '13 - 7:12 
GeneralMy vote of 4membernot_starman19 Feb '13 - 5:45 
GeneralMy vote of 2memberCarlos190719 Feb '13 - 5:40 
GeneralRe: My vote of 2memberAdam Zuckerman19 Feb '13 - 15:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130513.1 | Last Updated 25 Feb 2013
Article Copyright 2013 by Adam Zuckerman
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid