TEO KONKURS

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

Wygrywa ten kto napisze najszybszą wersję parsowania. Konkurs trwa do 31-12-2018 do 23:59:59.999. Wersja uznana jest za najszybszą jeśli od poprzedniej najszybszej wersji będzie szybsza o 5% w każdym z 10 powtórzeń testu.

Konkurs może skończyć się wcześniej. Nagroda zwycięscy zostaje przyznana jeśli po pull request z najszybszą wersją przez kolejne 30 dni nikt nie nadeśle szybszej wersji wówczas.

GitHub

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

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 z Twittera

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

Zdjęcie na Facebooku

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

Zdjęcie na Google+

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

Connecting to %s