Скажем, у меня есть C# интерфейс, называемый IMyInterface
определяется следующим образом:Являются ли виртуальные свойства более медленными, чем конкретные свойства?
// C# code
public interface IMyInterface
{
string MyProperty { get; }
}
Предположим, у меня также есть C++/класс CLI, MyConcreteClass
, который реализует этот интерфейс, и чей заголовок объявлен следующим образом:
public ref class MyConcreteClass : public IMyInterface
{
public:
virtual property String^ MyProperty
{
String^ get() sealed { return String::Empty; };
void set(String^ s) sealed { };
}
};
Очевидно, что при доступе к виртуальному члену через интерфейс среда выполнения должна искать реализацию в классе и будет медленнее, чем если бы член не был виртуальным.
IMyInterface obj;
obj->MyProperty = "HELLO";
Я спрашиваю конкретно об эффективности использования виртуальных элементов непосредственно на конкретном типе объекта. Это медленнее, если MyProperty
был виртуальным членом?
MyConcreteClass obj;
obj->MyProperty = "HELLO";
Проведите некоторые бенчмаркинга и посмотрите результат. –
Есть такая поговорка: цифры говорят сказку. Выполняйте бег с плотной петлей в несколько сотен тысяч или даже миллион раз с виртуальным и конкретным свойством и * измерьте разницу. Есть причина, почему существуют анализаторы Profiler и анализа производительности;) – RobIII
Это звучит как случай преждевременной микрооптимизации. – JustAnotherUserYouMayKnow