Pytanie brzmi: czy metody statyczne są wydajniejsze niż ich “zwykłe” odpowiedniki (instance methods)? Odpowiedź brzmi tak, ponieważ:
-
Wywołanie jakiejkolwiek niestatycznej metody na klasie powoduje przekazanie parametru “this” – a to wymaga dodatkowego czasu.
-
Same wywołanie jest bardziej czasochłonne dla zwykłych metod. W klasach statycznych nie ma dziedziczenia i wirtualnych metod. W niestatycznych metodach, kompilator musi dokonać kilka dodatkowych operacji. Każda metoda niestatyczna jest wywoływana za pomocą instrukcji IL callvirt a statyczna call. callvirt musi sprawdzić całą hierarchie klas, co jest więc z reguły bardziej czasochłonne.
Napiszmy więc przykładowy test:
Stopwatch stopwatch=new Stopwatch(); stopwatch.Restart(); stopwatch.Stop(); stopwatch.Restart(); // wywolanie statycznej metody for (int i = 0; i < testsNumber; i++) A.Method(); stopwatch.Stop(); long staticTime = stopwatch.ElapsedTicks; stopwatch.Restart(); // wywolanie niestatycznej metody for (int i = 0; i < testsNumber; i++) b.Method(); stopwatch.Stop(); long instanceTime = stopwatch.ElapsedTicks;
Wynik:
staticTime 29864
instanceTime 54746
Jaki z tego wniosek? Osobiście nie martwię się wydajnością a skupiam się wyłącznie na design. Wybierając typ metody zastanawiam się bardziej co jest lepsze dla przejrzystości API. Dla biznesowych lub industrialnych aplikacji nie ma to znaczenia. Jeśli dla danego projektu taka mała różnica jest ważna to lepiej zastanowić się nad zmianą języka ponieważ c# nie jest stworzony dla takich problemów. Poza tym, z moich obserwacji wynika kilka optymalizacji:
-
Pierwsze wywołanie metody niestatycznej jest dużo bardziej czasochłonne niż pierwsze wywołanie metody statycznej.
-
W trybie release wartości są dużą mniejsze – optymalizacja jest znacząca.
Myślę, że post należy traktować jako ciekawostkę i ewentualną wskazówkę do korzystania ze statycznych metod ale tylko wtedy gdy nie narusza to czytelności klasy.
druga 1 to wkoncu wywołanie metody(statycznej czy nie jest bardziej czasochłonne?) wnioskuję że niestatycznej ale z pkt.1 o optymalizacji wynika masło maslane:)
Bardzo ciekawy artykuł miło przeczytać coś napisanego zwięźle i na temat:)
Pozdrawiam
@Harry
Pomylka. Poprawilem ten blad ale widocznie sie nie wyslal. Dzieki za przypomnienie.