首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DynamicMethod.Invoke还是DynamicMethod.CreateDelegate+Invoke -哪个更快?

DynamicMethod.Invoke还是DynamicMethod.CreateDelegate+Invoke -哪个更快?
EN

Stack Overflow用户
提问于 2012-07-18 05:02:08
回答 1查看 674关注 0票数 1

下列哪一项提供了更好的性能:

代码语言:javascript
运行
复制
DynamicMethod dm = ....
..
//create IL for 'dm'
//store 'dm' for later use
..
..
later
..
..
dm.Invoke(..);

代码语言:javascript
运行
复制
DynamicMethod dm;
Delegate del = dm.CreateDelegate()
// store 'del' for later use
..
..
later
..
..
del(..);

注意到,通常会创建不同DynamicMethods的10或100 s,而每个DynamicMethod (通过存储的'dm's或‘del’s的哈希表)将被多次调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-18 05:20:22

如果您只是创建“丢弃”方法(现在不再使用它们),这并不重要。

但是,如果您重用它们,则第二个选项将大大加快速度。

更新:

第一个选项只使用反射(RuntimeMethodHandle.InvokeMethodFast(...))。我将假设,在内部,DynamicMethod也将在某个阶段编译,这将在第一次调用时产生一些额外的开销,可能还会导致额外的调用。

第二个选项是将DynamicMethod显式编译为已知的委托类型。众所周知,“直接”委托调用几乎与“直接”方法调用一样快。

意见:

始终使用第二种选择,即使只使用它们一次。除了大量的性能提高之外,您还可以获得一些编译时间的好处。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11534552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档