TEO KONKURS

Niech ten konkurs wpędzi Was w „ostrą jazdę bez trzymanki”. Kto będzie pierwszy? Na kogo spadnie szacunek .Net’owej społeczności?

Nagroda

Do zwycięzcy wyślę ładnie zapakowane 0.7 Jack’a Daniels’a i dziesięć setek Wiśniówki Lubelskiej.

Temat

Tematem konkursu jest zoptymalizowanie procesu zamiany ciągu bajtów na obiekty.

Zasady wygranej

Wersja uznana jest za najszybszą jeśli od poprzedniej najszybszej wersji będzie szybsza o 5% w każdym z 10 powtórzeń testu. Do mierzenia wydajności wykorzystany jest BenchmarkDotNet.

Nagroda zwycięscy zostaje przyznana wówczas gdy po pull request z najszybszą wersją przez kolejne 30 dni nikt nie nadeśle szybszej wersji.

GitHub

Odsyłam do strony GitHub tego projektu. Znajdziecie tam wszystkie, niezbędne, szczegółowe informacje wraz z krótkim tutorialem w pliku README.md.

Motywacja

Niedawno natrafiłem na projekt BenchmarkDotNet, który mnie zachwycił. Chcąc się nim pobawić wymyślałem sobie pretekst do tych zabaw – tym pretekstem jest właśnie temat tego konkursu.

Napisałem kilka wersji parsera eksperymentując z kodem. Robiłem niewielkie zmiany i odpalałem testy po czym sprawdzałem czy wydajność się poprawiła czy spadła. Nadal jednak jestem przekonany, że można osiągnąć większą wydajność, ale mi się już pomysły skończyły.

Śledząc kolejne wersje tych parserów będziecie mogli zobaczyć na żywo, na konkretnym przypadku:

  • jak bardzo nie wydajny jest regex
  • czy i o ile jest szybszy switch od if
  • jakie metody linq są wolne i jak bardzo potrafią być wolne
  • czy StringBuilder naprawdę jest szybszy od zwykłego string
  • zarządzanie pamięcią na własną rękę tak aby GC miał jak najmniej pracy
  • czy try {} catch {} ma wpływ na wydajność

Będziecie mogli również zobaczyć jak się konfiguruje i odpala BenchmarkDotNet oraz podejście do testów jednostkowych, które testują wszystkie wersje bibliotek parsera w jednym teście.

Na każdego, któremu uda się poprawić wydajność, oprócz nagród rzeczowych, spadnie szacunek ludzi naszej społeczności, a ja z pewnością nauczę się czegoś nowego.

Obecny poziom wydajności dla projektu produkcyjnego już dawno jest zadowalający. Tutaj dalsze optymalizacji mają charakter rozrywki.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

w

Connecting to %s