下列哪一项提供了更好的性能:
DynamicMethod dm = ....
..
//create IL for 'dm'
//store 'dm' for later use
..
..
later
..
..
dm.Invoke(..);
或
DynamicMethod dm;
Delegate del = dm.CreateDelegate()
// store 'del' for later use
..
..
later
..
..
del(..);
注意到,通常会创建不同DynamicMethods的10或100 s,而每个DynamicMethod (通过存储的'dm's或‘del’s的哈希表)将被多次调用。
发布于 2012-07-18 05:20:22
如果您只是创建“丢弃”方法(现在不再使用它们),这并不重要。
但是,如果您重用它们,则第二个选项将大大加快速度。
更新:
第一个选项只使用反射(RuntimeMethodHandle.InvokeMethodFast(...)
)。我将假设,在内部,DynamicMethod
也将在某个阶段编译,这将在第一次调用时产生一些额外的开销,可能还会导致额外的调用。
第二个选项是将DynamicMethod
显式编译为已知的委托类型。众所周知,“直接”委托调用几乎与“直接”方法调用一样快。
意见:
始终使用第二种选择,即使只使用它们一次。除了大量的性能提高之外,您还可以获得一些编译时间的好处。
https://stackoverflow.com/questions/11534552
复制相似问题