gpt4 book ai didi

autofac - 为什么 lambda 解析速度更快?

转载 作者:行者123 更新时间:2023-12-01 16:16:19 25 4
gpt4 key购买 nike

文档 recommend通过 lambda 将常用组件注册为 ...

This can yield an improvement of up to 10x faster Resolve() calls

现在显然有几个问题:

  1. 为什么? (编辑:澄清一下:如果注册时间增加,我会理解,因为你现在必须使用反射来找到正确的构造函数等,但为什么解析时间会增加?)
  2. 这适用于哪些场景/注册类别的哪些方面会导致该数字上升/下降?
  3. 我们通常谈论的解决时间是多少?就像“是的,现在需要 100 个而不是 10 个 cpu 周期”或者“正常”用例中实际可测量的数字(具有每个请求生命周期的 Web 服务)?

最佳答案

正如评论中所指出的,简短的版本是,具体实现将比解析的反射方式更快。<​​/p>

深入研究,思考每个步骤涉及的步骤。

lambda :

  1. 执行该方法。
  2. 没有第二步。

反射(reflection):

  1. 枚举要实例化的类型的所有构造函数。该列表可以被缓存,但 .NET 框架已经很好地缓存了。
  2. 在所有可用的构造函数中,根据可用构造函数参数的数量和容器中注册的类型确定要执行哪一个。请注意,容器中注册的类型可能会发生变化,具体取决于注册源、生命周期范围注册等。
  3. 解析构造函数参数。如果存在构成构造函数参数的基于反射的注册,请递归地通过此过程运行它们。
  4. 使用解析的参数调用选定的构造函数。

正如你所看到的,反射解析方式实际上比Activator.CreateInstance多了很多工作,这就是为什么它需要更长的时间。

但是,正如评论中所指出的,不要担心过早优化。这一切发生得非常快,因此请等待优化,直到您可以使用分析器或某些类似工具实际找到瓶颈。

关于autofac - 为什么 lambda 解析速度更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com