动态调用方法时的性能差异

时间:2011-06-28 06:54:30

标签: c# .net clr

这两个示例方法调用之间是否有很大的性能差异?

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

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

让我们假设

  

动态dyn =   someAssembly.CreateInstance( “SampleLib.SampleClass”)

不是经常打电话。一旦它创建了实例,它将继续只在创建的实例中继续工作。

1 个答案:

答案 0 :(得分:3)

唯一可以确定的方法是在您的上下文中分析。为了设置期望,dynamic非常聪明,并且(按模式)缓存​​实际的代码路径。因此,它比原始反射快得多,但是界面应该稍微快一些并且具有静态检查的优势。

就个人而言,我会编写一个来自库dll的接口,当前代码和SampleLib都可以引用它,即

IMyInterface foo = (IMyInterface)someAssembly.CreateInstance(
                         "SampleLib.SampleClass");
...
foo.DoSomething("Hello");