Для модульного тестирования и издевательств стало обычной практикой объявлять методы и свойства виртуальными. Возникает ли влияние производительности при объявлении виртуального как предполагаемого не виртуального?Влияние виртуальных методов на производительность
ответ
В общем, различие заключается в том, что виртуальные методы вызывают с использованием кода Opel Callvirt, тогда как не виртуальные методы используют стандартный вызов Opcode. Коды Opcodes, безусловно, быстрее, чем Callvirt, но я никогда не видел их почти достаточно значительными, чтобы оправдать принятие решений на основе этого.
Premature optimization is the root of all evil.
IIRC, компилятор C# будет использовать CallVirt для всех методов экземпляра, независимо от того, являются ли они виртуальными. Таким образом, CLR выполняет проверку недействительности. –
@JohnSkeet Значит ли это, что в конце дня нет никакой разницы? – TGH
Good point John - вы правы, за исключением методов экземпляров типа значения, которые, как мне кажется, для которых компилятор испускает Opcodes.Call. – Jeff
Нет, не особо.
Это не то, что вы собираетесь заметить.
я не знаю специфику, но я знаю, что вам не придется беспокоиться об этом на 99% приложений там.
btw - Если вы выбираете Mock интерфейсы вместо классов, вам не понадобятся виртуальные методы.
Успехов, Том
У вас такой же косвенный «штраф» с интерфейсом как виртуальный метод. – leppie
- 1. Влияние ROW_NUMBER на производительность?
- 2. Влияние отклика на производительность
- 3. Влияние javax.servlet.Filter на производительность?
- 4. Console.Writeline Влияние на производительность
- 5. Влияние мыши на производительность
- 6. Влияние `USE` на производительность
- 7. notify_one Влияние на производительность
- 8. . Производительность на виртуальных машинах
- 9. влияние на производительность статического конструктора
- 10. Log.d и влияние на производительность
- 11. Влияние длины кода на производительность?
- 12. Влияние default_scope рельса на производительность
- 13. Влияние виртуального наследования на производительность
- 14. ISO_C_BINDING: Влияние на производительность/оптимизацию
- 15. Влияние неиспользованного индексации на производительность
- 16. Влияние объема памяти на производительность
- 17. JPA - Влияние плетения на производительность
- 18. Влияние гиперпотока на производительность компилятора?
- 19. Влияние на производительность nvarchar (4000)?
- 20. Java - Влияние System.out на производительность
- 21. Влияние размера данных на производительность
- 22. сигнал(): любое влияние на производительность?
- 23. Имитация виртуальных методов в Delphi
- 24. Производительность собственных методов Ruby
- 25. Обнаружение виртуальных методов
- 26. Влияние Dalvik на производительность на языке C++?
- 27. Рамификации виртуальных методов/свойств
- 28. Таблицы виртуальных методов
- 29. Переопределение не виртуальных методов?
- 30. проектирование виртуальных методов
Вы думаете _design для testability_ просто делает все 'virtual' и все классы' open'? Хмм ... –
@StefanHanke: Я не вижу ничего, предполагая, что OP думает, что это просто * это. –
Да, я не думаю, что это должно быть сделано, когда это не нужно ... Это всего лишь одна мера, которая может улучшить тестируемость, когда это необходимо – TGH