使用.NET/C#中的委托加速反射API

本文关键字:加速 反射 API NET 使用 | 更新日期: 2023-09-27 18:00:00

这篇文章的注释是if you need to call the method multiple times, use reflection once to find it, then assign it to a delegate, and then call the delegate.

  • delegate是如何以及为什么工作得更快?有人能举个例子吗
  • 我可以叫这个caching吗?如果是,除了这个带有委托的缓存方法之外,还有其他方法吗

已添加

我在这里提出了一个使用delegate的例子。

使用.NET/C#中的委托加速反射API

委托只是指向函数的指针。如果你使用反射(在所有),通常会有很多开销与之相关。通过找到这个方法地址一次并将该地址分配给你的委托变量,你实际上是在缓存它。

所以,并不是"委托"类型的工作速度更快,只是你"计算"一次并"使用"多次,才能提高速度。

Delegate.CreateDelegate

可能是MSDN上最好的文档:)

显然,由于反射导致的窃听减少,它的工作速度会更快。如果你遵循提示,你不会每次都进行反射,而是将引用存储在代理中,因此你可以通过不重新进行反射来降低成本。所以,是的,它的作用就像缓存,我想一旦你在委托中存储引用,你就不必再去反射

首先关闭,这不是缓存。您没有将方法的副本保存在"较近"的位置,您只是保留了对该方法的引用。

考虑一下使用反射调用方法所需的步骤(从程序集中访问reflation数据,按名称查找方法/命名空间/类等等…),最后一步是获取对该方法的引用(不要让任何人告诉你委托是指针!)并调用它。当你使用代理时,你只需要迈出最后一步,就可以省去反思带来的所有头痛。

这不是很明显吗。您将程序集加载到应用程序域中;创建类型的实例,然后创建指向该实例的方法的委托。。。