Performance Measurement Framework in .NET

Published Thu, Feb 5 2004 3:05 PM

Performance Measurement in .NET

Bij het coderen komen nogal eens vragen op als:

Is manier A nu sneller dan manier B of andersom ?

Of: Ik weet dat manier A gebruikt dient te worden want die is sneller dan B, maar hoeveel scheelt het nu daadwerkelijk ?

 

Om op dit soort vragen antwoord te geven heeft Nick Wienholt een Performance Measurement Framework geschreven.

http://www.dotnetperformance.com/downloads/harnesscode.zip

(Source included)

 

In dit generieke testframework kan je heel eenvoudig testen uitvoeren zoals hierboven beschreven.

Nick heeft er ook een artikel bij geschreven:

http://www.dotnetperformance.com/downloads/harness.doc

 

In korte tijd zijn hierin tests te coderen die veelzeggend zijn:

De output kan gekozen worden bijvoorbeeld een graph, messagebox of naar een bestand.

 

Hieronder volgt een simpele test mbt string.empty of string.length gebruiken:

De grafiek onder de code laat genoeg resultaat zien. (bij een iteratie van 50 miljoen x per method)

 

using System;

using DotNetPerformance;

 

namespace Test_Example

{    

      public class StringTest

      {

            public TestResult[] RunTest()

            {    

                  const int numberIterations = 50000000;

                  const int numberTestRuns = 5;

                 

                  TestRunner tr = new TestRunner(numberIterations, numberTestRuns);

                  TestRunner.TestCase testCases = null;

                  testCases += new TestRunner.TestCase(this.Method1);

                  testCases += new TestRunner.TestCase(this.Method2);

                  testCases += new TestRunner.TestCase(this.Method3);

                  testCases += new TestRunner.TestCase(this.Method4);              

                 

                  return tr.RunTests(testCases);

            }

 

            public void Method1(Int32 NumberIterations)

            {

                  string x = "";

                  int j = 0;

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

                  {

                        if (x.Length>0)

                        {

                              j++;

                        }

                  }

            }

 

            public void Method2(Int32 NumberIterations)

            {

                  string x = "";

                  int j = 0;

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

                  {

                        if (x!=string.Empty)

                        {

                              j++;

                        }

                  }

            }

 

            public void Method3(Int32 NumberIterations)

            {

                  string x = "piet";

                  int j = 0;

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

                  {

                        if (x.Length>0)

                        {

                              j++;

                        }

                  }

            }

 

            public void Method4(Int32 NumberIterations)

            {

                  string x = "piet";

                  int j = 0;

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

                  {

                        if (x!=string.Empty)

                        {

                              j++;

                        }

                  }

            }

      }

}

 

 

 

Comments

# Pascal Naber said on Thursday, February 05, 2004 5:36 PM

Leuk en alles, maar wat is dat 0.0 t/m 5.0???

# Pascal Naber said on Friday, February 06, 2004 8:20 AM

Dit is het resultaat als er als output de messagebox (summary) wordt gekozen:
Method1 Median 00:00:01.0915696
Method2 Median 00:00:02.2632544
Method3 Median 00:00:01.2017280
Method4 Median 00:00:05.3276608

Het is helemaal afhankelijk van de test wat de getallen aan de zijkant voorstellen.
In dit geval is het het aantal seconden.

# Natalee said on Wednesday, June 06, 2007 2:19 AM

keep up the good work

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Please add 8 and 1 and type the answer here: