为什么lambda会更快解决?

时间:2016-01-31 13:09:25

标签: autofac

文档recommend通过lambdas将经常使用的组件注册为......

  

这可以使快速Resolve()次呼叫的速度提高10倍

现在显然有几个问题:

  1. 为什么? (编辑:澄清:我会理解注册时间是否会上升,因为你现在必须使用反射来找到正确的构造函数等,但为什么要解决这个问题呢?)
  2. 在哪种情况下这适用/注册课程的哪些方面使这个数字上升/哪些使其下降?
  3. 无论如何,我们通常会谈论什么样的解决方案?喜欢"是的,现在需要100个而不是10个cpu周期"或实际可测量的数字" normal"用例(每个请求生存期的Web服务)?

1 个答案:

答案 0 :(得分:4)

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

深入潜水,考虑每个步骤。

LAMBDA:

  1. 执行方法。
  2. 没有第二步。
  3. 反射:

    1. 枚举要实例化的类型的所有构造函数。这个列表可以被缓存,但已经被.NET框架很好地缓存了。
    2. 在所有可用的构造函数中,根据可用的构造函数参数的数量和容器中注册的类型,确定要执行的构造函数。请注意,容器中注册的类型可能会根据注册来源,生命周期范围注册等进行更改
    3. 解析构造函数参数。如果有构成构造函数参数的基于反射的注册,则以递归方式运行它们。
    4. 使用已解析的参数调用选定的构造函数。
    5. 正如您所看到的,在解析的反射方式中,实际上除了Activator.CreateInstance之外还有更多的工作,这就是为什么需要更长的时间。

      但是,正如评论中所指出的那样,不要担心过早优化。这一切都很快发生,所以请等待优化,直到您可以使用分析器或类似工具找到瓶颈。