Skąd mam wiedzieć, że mój kod jest wydajny lub nie?

0

Witam,
Jestem początkującym programistą i chciałbym poprosić o parę wskazówek dotyczących wydajności / optymalizacji kodu.

Skąd mam wiedzieć, że mój kod jest wydajny lub nie ? Jak testować swoją aplikację ? Na co zwracać uwagę przy poprawnym pisaniu programu ? Chodzi mi o takie ogólne zasady, a nie o konkretny język lub platformę.

Z góry dziękuję za odpowiedź.
Pozdrawiam.

3

Skąd mam wiedzieć, że mój kod jest wydajny lub nie ?

http://en.wikipedia.org/wiki/Profiling_(computer_programming)

Jak testować swoją aplikację ?

http://en.wikipedia.org/wiki/Software_testing

Na co zwracać uwagę przy poprawnym pisaniu programu ?

Na czytelnosc.

2

Pamiętaj, że czasami warto poświęcić wydajność czy zwięzłość na rzecz czytelności. Zwłaszcza jeżeli nad kodem pracuje zespół. Oczywiście takie przesunięcia "ciężaru" muszą być wykonywane w granicach rozsądku. Zarówno do optymalizacji jak i testowania znajdziesz mnóstwo narzędzi. Ale nic nie zastąpi rozsądku. A superwydajny, ale zagmatwany kod można dobrze skomentować.

3

Odpowiedz sobie na początku na pytania:

  • co to jest wydajność?
  • jak mierzyć wydajność?
  • po co chcesz optymalizować?

Czy Twój program jest wydajny, jeśli używa :
a) X RAMu ?
b) 30% CPU ?
c) 40 operacji IO/s ?

Jeśli nie wiesz jak odpowiedzieć na te pytania, to proponuję, żebyś zaczął od teorii i poczytał o złożoności obliczeniowej.

Zastanów się nad 2 przypadkami:
a) masz ograniczone zasoby (RAM/CPU/dyski) - program poprawnie działa, ale czy wykorzystanie zasobów może być mniejsze?
(np. zamiana algorytmu sortowania z bąbelkowego na quick sorta, a może da się uniknąć sortowania kosztem innych zasobów CPU vs RAM i zjechać ze złożonośći czasowej z O(N^2) do O(1) ? )

b) masz zdefiniowane wymagania "program musi rozwiązać problem/ukończyć zadanie w czasie < T" - jakie zasoby dobierzesz? Skąd będziesz wiedział, że już nie ma sensu poprawiać algorytmów i czas zająć się zasobami?

W skrócie, skup się na:

  • poprawności rozwiązania, a nie wydajności
  • teorii złożoności obliczeniowej
0

W internecie jest pierdyliard opinii i nie wiadomo kogo słuchać.A tutaj konkrety.
Wielkie dzięki za odpowiedź :)

2

Wydajnością zajmuj się na samym końcu. Oczywiście w granicach rozsądku - nie szukaj liniowo kiedy możesz użyć mapy etc. ale nie kmiń nad dziwnymi optymalizacjami. Bo efekt zwykle jest taki ze spędzisz godziny nad czymś co przyspieszy ci program o kilka ms a jednocześnie sprawi ze będzie nieczytelny.
Optymalizuj tylko jeśli trzeba (np nie mieścisz się w limitach) i tylko miejsca które profiler oznaczy jako takie które warto.

1

Przede wszystkim, zanim rozpocznie się optymalizacje, trzeba sobie wyznaczyć cel wydajnościowy. Np jeśli klepiemy sobie aplikację, która np liczy faktury, etc to naszym celem jest to by operacje trwały w miarę krótko, ale z drugiej strony zbijanie czasu pojedynczej operacji ze 100ms do 10ms nawet nie zostanie zauważone. Długie operacje można puścić w tle jeśli ich wynik nie jest natychmiast potrzebny, itd Jednak jeśli klepiemy kolejny silnik baz danych i naszym atutem ma być wydajność, to celem jest bycie znacznie szybszym niż konkurencja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1