Wpis z mikrobloga

@scriptkitty: Tak, w API czy czymkolwiek związanym z DB to requesty i DB będą bottleneckiem. Jednak ostatnio pisałem prawie roczny projekt importu danych z jednego systemu do drugiego, gdzie dane trzeba bylo wyciagnac, przekonwertowac i zapisac w nowej DB. Duzo operacji na CPU, miałem nawet ustawienie gdzie program dzielił wszystkie operacji na tyle wątków ile miał procesor, i równorzędnie na wątkach te procesy cisnął, potem zapisując resultaty do "thread safe" kolekcji...
@Saly: Zgadza się, ale to wciąż mikrooptymalizacja. Według mnie powinno się na takie rzeczy zwracać  uwagę dopiero gdy okazuje się, że program jest za wolny - przy pomocy profilera. Bo intuicja bardzo często podpowiada nam złe miejsca.

Oczywiście jeśli piszesz grę, albo sterownik albo coś innego co z założenia ma mieć dużą wydajność to wtedy ma sens przyglądać się takim szczegółom.
projekt importu danych z jednego systemu do drugiego, gdzie dane trzeba bylo wyciagnac, przekonwertowac i zapisac w nowej DB


@Varin: no i będziesz to odpalać codziennie przez rok czy raz i koniec? Zgaduję, że nie ma to żadnego znaczenia ile to będzie trwało, bo choćby miało tydzień chodzić to jest to jednorazowa akcja i dobranoc. Ważniejsze jest, żeby tam bugów nie było przez małoczytelny kod i jakieś gimnastyki z arrayami byle
@Varin: każdy Unity developer takie rzeczy ogarnia i to że foreach kiedyś alokował pamięć na heap na obiekt do enumeracji. Jak masz 16ms na ogarniecie wszystkiego w tym iterowanie po tysiącach elementów to takie rzeczy ma sie w małym palcu. Każdy programista z gamedev zna tez inne znaczenie DDD czyli Data-driven design czyli układanie danych w pamięci tak żeby korzystać z cachingu w CPU i operacji SIMD. Pomaga w tym Entity
@zibizz1: Ciekawa sprawa, ale chyba jest tak jak wielu tutaj mówi. Time To Market to zmora programistów perfekcjonistów, bo w większości biznesów to się liczy, w apkach biznesowych takie oszczędności mało znaczą bo mamy ciągłe requesty do API albo bazy danych co zajmuje o rząd większości ... więcej... czasu a tego się zredukować łatwo nie da, a na pewno nie do poziomu gdzie operacje na tablicach mają znaczenie.

W gamedevie inna
@Varin: Najczęściej nie opłaca się optymalizować przez Premature Optimization. Łatwiej wydać 10k USD więcej za sprzęt i zasoby (albo zmusić użytkowników do zakupu lepszego sprzętu) niż zapłacić programistom za dłubanie i zaciemnianie kodu poprzez pisanie szybszego kodu. Firmom nie przeszkadza płacenie miliona za chmure miesięcznie dopóki ma kilka milionów przychodu, dopiero gdy linie na wykresie zaczynają się przecinać ktoś zaczyna analizować i okazuje się że da się utrzymać infrastrukturę za 50k
@Varin: for vs foreach też zależy co się faktycznie w tej pętli w środku dzieje. Bo jeśli odpytujemy tablicę raz, to tak, foreach będzie wolniejszy, jeśli odpytujemy tablicę np. kilka razy, to for już może być wolniejszy.

A i tak głównie się rozchodzi o czytelność, a tutaj foreach wygrywa prawie zawsze. Często też używam LINQ, bo kod wtedy się sam dokumentuje.
@Varin: jak trzeba zmieniać wartości i w iterowanej kolekcji. Inaczej to foreach. Optymalizacja w gównoapkach, które klepie 80% programistów nie ma sensu. Więcej Ci zajmie rozkminianie tego niż jest faktyczny zysk. Tak jak ktoś pisał: optymalizacja profilerem jak się okazuje, że produkcja nie ogarnia takich requestów.