разница в производительности при динамическом вызове метода - PullRequest
1 голос
/ 28 июня 2011

Есть ли большая разница в производительности между этими двумя примерами вызовов методов?

SampleClass sc = new SampleLib.SampleClass();
sc.DoSomething("Hello");

dynamic dyn = someAssembly.CreateInstance("SampleLib.SampleClass")
dyn.DoSomething("Hello");

Предположим, что

динамический динам = someAssembly.CreateInstance ( "SampleLib.SampleClass")

не частый звонок. После создания экземпляра он будет интенсивно работать только с созданным экземпляром.

1 Ответ

3 голосов
/ 28 июня 2011

Единственный способ узнать наверняка - это профиль в вашем контексте . Чтобы установить ожидание, dynamic довольно умен, и кеширует (для каждого шаблона) фактический путь к коду. Таким образом, он намного быстрее, чем необработанное отражение, однако интерфейс должен быть немного быстрее и иметь преимущество статической проверки.

Лично я бы написал код для интерфейса библиотеки dll, на который могут ссылаться как текущий код, так и SampleLib, т.е.

IMyInterface foo = (IMyInterface)someAssembly.CreateInstance(
                         "SampleLib.SampleClass");
...
foo.DoSomething("Hello");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...