QuickBencher (beta)

I går lanserte jeg versjon 0.1 av et lite open source bibliotek jeg har valgt å kalle QuickBencher. Dere finner det på quickbencher.codeplex.com. Formålet er å gjøre det litt enklere å måle hvor lang tid ting tar, og kjøre sammenligninger på ulike større eller mindre kodesnutter. Her er et eksempel:

    1 var list = new List<string>();

    2 for (int i = 0; i < 10000000; i++)

    3     list.Add(i.ToString());

    4 

    5 string dummy;

    6 Benchmark.Bm(x =>

    7 {

    8     x.Report(“For:”, ()

    9         => { for (int i = 0; i < list.Count; i++) dummy = list[i]; });

   10     x.Report(“While:”, ()

   11         => { var enu = list.GetEnumerator(); while(enu.MoveNext()) dummy = enu.Current; });

   12     x.Report(“Foreach:”, ()

   13         => { foreach (var item in list) dummy = item; });

   14     x.Report(“Lambda:”, ()

   15         => { list.ForEach(s => dummy = s); });

   16 });

Output:

                  user     system      total        real
  For:        0.140401   0.000000   0.140401 (  0.147000)
  While:      0.124801   0.000000   0.124801 (  0.122000)
  Foreach:    0.124801   0.000000   0.124801 (  0.121000)
  Lambda:     0.062400   0.000000   0.062400 (  0.093000)

Mens jeg holdt på å lære meg Ruby kom jeg over en modul som heter Benchmark. “En sånn modul skulle jeg hatt i verktøyskrinet mitt når jeg utvikler i C#,” tenkte jeg, og siden det ikke så ut som om noen hadde gjort det før så lagde jeg den.

Ta en titt på prosjektsiden på CodePlex for mer info og for å laste ned v0.1. Den skal fungere mer eller mindre som tiltenkt, men det hadde vært kjekt å få litt tilbakemelding på om den fungerer for andre enn meg. Jeg tar gladelig imot forbedringsforslag, og hvis noen har lyst til å bidra på andre måter så er dere velkomne til det.

Kategorier: Diverse prosjekter.
RSS feed for kommentarene. Tilbaketråkk.

6 kommentarer til “QuickBencher (beta)”

  1. Jonas Follesø Says:

    Nice!

    På prosjektet jeg jobber på har jeg laget noen enkle hjelpeklasse for å måle tid på deler av koden. Bruker de i enkle stresstester hvor testen feiler dersom en metode over tid begynner å ta mer tid enn planlagt (spesifisert i testen).

    Får du rapporten fra Measure kallet ut som et objekt? Hadde vært kjekt, kunne i såfall gjort asserts mot rapporten fra QuickBencher.

    :)

  2. Torbjørn Says:

    God idé! Jeg har et internt Measurement-objekt som jeg enkelt kunne ha returnert. Dette blir helt klart en feature i v0.2. Takk.

  3. Jonas Follesø Says:

    Var inne og tittet litt på koden, og ser at dette er funksjonalitet som burde være fult muluig å legge til.

    Du kan jo og prøve forskjellige ideer. F.eks utvide DSL’en din til å legge inn en makstid, og automatisk kjøre Assert.

    Benchmark.Bm(() => myObj.DoSomething()).MaxTime(“10s”);

  4. Torbjørn Says:

    Ja, jeg var inne på tanken om å gjøre det også. Men jeg ble usikker på om jeg ønsker å binde meg opp mot testrammeverket (evt. adaptere for flere rammeverk). Kan jeg få til asserts uten mon tro?! Kaste exception ved tids-overskridelse kanskje?? Mulig jeg må ta en titt på hvordan andre har gjort lignende ting.., f.eks. i tinyBDD eller coretdd.

    I første omgang tenker jeg det bør være greit nok å bare returnere Measurements, så kan brukerne selv velge hvordan de gjør asserten – greit for dem som har sterke meninger om hvordan testene skal kommunisere (AAA-, Given-When-Then-, Should-semantikk). Jeg unngår også “magi” i API’et mitt som må forklares. Men jeg skal tenke på det. Kommer nok en v0.2 snart :)

  5. Torbjørn Says:

    Version 0.2 er shippet: http://quickbencher.codeplex.com/

  6. Fremtidige løfter Says:

    [...] Her brukte jeg QuickBencher (et open source prosjekt jeg har liggende på CodePlex) til å måle forbrukt tid, og verifiserte samme oppførsel som Clojure-varianten. [...]

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Torbjørn: La oss anta to ulike definisjoner av Template Method pattern - de to ytterpunkte...

Lars-Petter: Hei igjen. Siden du inviterer til å ta diskusjonen i bloggen, og har tatt deg t...

Torbjørn: Lars-Petter: Det er én måte å se det på. Det er absolutt fortsatt Template M...

Lars-Petter: Hei. Har du ikke i prinsippet her gått over fra Template Method (arv) til Strat...

Christian Abildsø: I alle fall i C#, så føles dette som kode som blir mer fleksibel men vanskelig...

Torbjørn: Hei Henrik, og takk for tilbudet. Ble oppmerksom på Rasberry Pi for under en uk...

Henrik Sandaker Palm: Ang. større hobby prosjekt. Du er som er en slik rakker på programmering har j...

Øivind Nilsen: Slutt å bruke mobilnummeret mitt som eksempel !...

Bjørn Einar Bjartnes: Jeg har også latt meg fascinere av Clojure, uten at jeg har kommet så veldig l...

Bjørn Einar Bjartnes: Sweet :) Jeg tror egentlig jeg liker det som det er, med musikk. Litt av utford...

Mulig relaterte linker

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • Template Method del 4: Multippel arv
  • Template Method Intermesso
  • Template Method del 3: Bare funksjoner
  • Template Method del 2: På vei mot funksjonell programmering
  • Kategorier

  • .net ninja (37)
  • Bøker (17)
  • Diverse prosjekter (35)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (77)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (33)
  • NNUG / community (60)
  • O/RM & databaser (10)
  • Off topic (116)
  • OO-design/clean code (30)
  • Podcasts (14)
  • Polyglot (77)
  • Ruby (27)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (20)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (32)
  • WPF (9)
  • WTF (12)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta