出于记录目的,我们的应用程序中的一些方法包括以下行:
Dim Log As ILog = GetLog(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
我有可能被描述为对反思的非理性恐惧,我试图控制它.但是,在每秒执行一百次的方法中,这样的调用会引起我的注意.我不太了解反思;但是从简要介绍文档来看,我认为我可以用以下内容替换以下内容:
Dim Log As ILog = GetLog(Me.GetType())
我的问题有三方面:
> Me.GetType()实际上是否返回与GetCurrentMethod()相同的Type.DeclaringType?
> Me.GetType()实际上做了什么不同于GetCurrentMethod().DeclaringType,还是在幕后做同样的事情?
>我根本不应该担心这个吗?性能在此应用中至关重要;该程序运行良好,但我们的业务性质是这样的,如果我们可以在这里和那里削减甚至几微秒,这是有用的.
在你的情况下this.GetType()将产生与MethodBase.GetCurrentMethod()相同的结果.DeclaringType可以.有关两个调用将返回不同类型的情况,请参阅JaredPar的答案.
原文链接:https://www.f2er.com/vb/255268.html在一般情况下,公开成员的类型(通过MemberInfo.ReflectedType属性获得)和声明成员的类型(通过MemberInfo.DeclaringType属性获得)可能不同.
UPDATE
我只是使用C#来描述它 – this.GetType()每次调用需要2.5 ns,而MethodBase.GetCurrentMethod().每次调用需要2490 ns的DeclaringType – 所以你的速度大约是因子1200.
[Intel Core 2 6400 2.13 GHz | 3.5 GiB | WinXP Pro SP2 | .NET FX 3.5 SP1 |发布|没有调试器]