Re: Есть ли разница в быстродействии???
От: Dufrenite Дания  
Дата: 10.10.06 17:56
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Есть ли разница в быстродействии если я унаследуюсь от интерфейса или базового типа

A_>Например можно обьявить интерфейс с функцией
A_>а можно сделать базовый класс с такой же функцией.
A_>Вопрос — будет ли разница в быстродействии при обращении к этим методам.
A_>Просто предпологается что обращений будут миллионы — и хочется заранее выбрать правильную стратегию.

Можно провести такой эксперимент:

namespace Calls
{
    class Base
    {
        public virtual void Foo()
        {
        }
    }

    class Derived : Base
    {
        public override void Foo()
        {
        }
    }

    interface IBase
    {
        void Bar();
    }

    class Realizer : IBase
    {
        public void Bar()
        {
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Base b = new Derived();
            IBase ib = new Realizer();
            b.Foo();
            ib.Bar();
        }
    }
}

Just-in-time компилятор генерирует такой код:

            b.Foo();
00000053  mov         ecx,edi 
00000055  mov         eax,dword ptr [ecx] 
00000057  call        dword ptr [eax+38h] 
0000005a  nop              
            ib.Bar();
0000005b  mov         ecx,ebx 
0000005d  call        dword ptr ds:[00920018h] 
00000063  nop

Здесь видно, что вызов по интерфейсу компилятор оптимизирует в статический.
Вот такая вот петрушка...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.