Powiel możliwe:
Why are interface method invocations slower than concrete invocations?Który z nich jest szybki, Klasa abstrakcyjna lub interfejs?
Niedawno miałem szansę zaistnieć w wywiadzie, w którym wywiad zapytał, który z nich jest szybsza wśród abstrakcyjna klasa i Interfejs. Chociaż nie rozumiem tego pytania, ale odpowiedziałem: Interfejs przede wszystkim dlatego, że myślałem, że późna koncepcja wiążąca może spowodować opóźnienie w wydajności w klasie abstrakcji. Po zbadaniu tego samego pytania w sieci, dowiedziałem się, że metody abstrakcyjne są szybsze, chociaż według niektórych blogów metody interfejsu są szybsze. Byłem trochę zdezorientowany, więc pomyślałem, aby zadać to pytanie, aby mieć prawidłowe zrozumienie tego, który z nich jest szybszy i dlaczego z silnym powodem.
Zgodnie z poniższą lekcją Klasa abstrakcyjna jest szybka, ale nie ma ku temu uzasadnionego powodu. http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface
surowo kusi, by powtórzyć pierwszą zasadę dwa razy, tak jak we wszystkich tych "pierwszej zasadzie w Fight Club" cytuje ... – tucuxi
Problem z tą filozofią polega na tym, że nie ujawni ona, czy rzeczywiste czynniki mogą generalnie lepsze podejście do wykonywania czasami może być gorsze niż ogólnie gorsze.Na przykład, biorąc pod uwagę wybór między dwoma fragmentami kodu, z których jeden wymaga kilku dostępów vtable, a jeden z nich wymaga przydzielenia dodatkowych 32 bajtów śmieci, możliwe, że ten, który generuje więcej śmieci, byłby zwykle szybszy, ale mógłby w końcu jest znacznie wolniej, jeśli jest dużo śmieci gen2, które są dotykane pomiędzy cyklami zbierania gen0. – supercat
Chodzi mi o to, że optymalizacja ręczna wszędzie jest o wiele gorsza w użyciu, niż optymalizacja * tylko tam, gdzie naprawdę się liczy *. Najpierw profil, znajdź, co jest na topie, i zoptymalizuj * to *. W przeciwnym razie marnujesz czas i wysiłek. – tucuxi