W celu dostosowania testów jednostkowych i szyderstwa powszechną praktyką jest deklarowanie metod i właściwości jako wirtualnych. Czy występuje efekt deklarowania czegoś wirtualnego jako podobnego do nie-wirtualnego?Wpływ metod wirtualnych na wydajność
Odpowiedz
Zasadniczo różnica polega na tym, że metody wirtualne są wywoływane za pomocą kodu operacyjnego Callvirt, podczas gdy metody wirtualne nie używają standardowego kodu wywoławczego. Call Opcodes są zdecydowanie szybsze od Callvirt, ale nigdy nie udało mi się znaleźć tak blisko, by uzasadnić podejmowanie decyzji projektowych w oparciu o to.
Premature optimization is the root of all evil.
IIRC, kompilator C# użyje CallVirt dla wszystkich metod instancji, niezależnie od tego, czy są wirtualne. W ten sposób CLR przeprowadza kontrolę nieważności. –
@JohnSkeet Czy to oznacza, że pod koniec dnia naprawdę nie ma różnicy? – TGH
Dobra racja John - masz rację, z wyjątkiem metod instancji typu wartości, które moim zdaniem - dla których kompilator emituje Opcodes.Call. – Jeff
Nie, nie bardzo.
Nie jest to coś, co zauważysz.
Nie znam szczegółów, ale wiem, że nie trzeba się martwić o to 99% aplikacji tam.
btw - Jeśli zdecydujesz się na symulowanie interfejsów zamiast klas, nie będziesz potrzebować metod wirtualnych.
Powodzenia Tom
Masz taką samą "karę" zwodniczą z interfejsem jako metodą wirtualną. – leppie
- 1. Wpływ Console.Writeline na wydajność
- 2. Systemtap wpływ na wydajność
- 3. Log.d i wpływ na wydajność
- 4. Jaki jest wpływ selektora uniwersalnego na wydajność?
- 5. Znaczniki a punkty wektorowe - wpływ na wydajność
- 6. Dlaczego lenistwo Haskella miało wpływ na wydajność?
- 7. Wpływ na wydajność dyrektywy ng-csp
- 8. Zagnieżdżony wpływ selektorów na wydajność i MNIEJ
- 9. Jaki jest wpływ nie unikatowych indeksów na wydajność w pandach?
- 10. Wywołanie wirtualnych metod innych klas w ctors
- 11. Wydajność Expression.Compile vs Lambda, bezpośrednie vs wirtualnych połączeń
- 12. Wpływ rozmiaru pakietu na wydajność w Oracle 10g
- 13. Czy dodanie [Serializable] do klasy może mieć wpływ na wydajność?
- 14. Java 8: Operacja łączenia ciągów ma znaczący wpływ na wydajność
- 15. Czy kolejność członków obiektów klasy ma jakikolwiek wpływ na wydajność?
- 16. Wpływ jvmti na wydajność, gdy debugger nie jest podłączony?
- 17. C# Alternatywa dla wirtualnych metod statycznych i podklatek statycznych
- 18. Co to jest wywoływanie metod wirtualnych w języku Java?
- 19. Tworzenie abstrakcji klasy bez żadnych czystych metod wirtualnych
- 20. Potrzebujesz zrozumieć poniższy kod dla wirtualnych metod C#
- 21. Wpływ wartości zmiennoprzecinkowej na właściwości CSS
- 22. Metoda X509Certificate2.Verify(), sprawdzanie poprawności na liście odwołania i jej wpływ na wydajność
- 23. Czy uruchamianie bazy danych SQL Server 2005 na poziomie zgodności 80 ma negatywny wpływ na wydajność?
- 24. Symfony 2 na wirtualnych hostach
- 25. Wpływ wydajności wirtualnego dziedziczenia
- 26. Wpływ IsBackground na wątki .Net?
- 27. Wpływ SEO na hash hash?
- 28. Czy inicjalizacja zmiennej lokalnej o wartości zerowej ma wpływ na wydajność?
- 29. React Native - czy console.log() ma negatywny wpływ na wydajność podczas przechodzenia do produkcji?
- 30. Korzystanie z SQLDependency vs. okresowe pobieranie z tabeli (wpływ na wydajność)
Myślisz _design dla testability_ właśnie czyni wszystko 'virtual' i wszystkich klasach' open'? Hmm ... –
@StefanHanke: Nie widzę niczego, co sugerowałoby, że OP myśli, że to * właśnie * to. –
Tak, myślę, że nie powinno się tego robić, gdy nie jest to konieczne ... To tylko jeden środek, który może poprawić testowalność, gdy jest to odpowiednie. – TGH