gpt4 book ai didi

.net - 在(据称)高性能代码中使用 GetCurrentMethod

转载 作者:行者123 更新时间:2023-12-04 13:07:47 24 4
gpt4 key购买 nike

出于日志记录的目的,我们应用程序中的一些方法包括以下行:

Dim Log As ILog = GetLog(Reflection.MethodBase.GetCurrentMethod().DeclaringType)

我有一种可能被描述为对反射(reflection)的非理性恐惧,我试图控制这种恐惧。然而,在每秒可能执行一百次的方法中调用这样的方法让我感到担忧。我对反射(reflection)的了解并不多;但是通过简要查看文档,在我看来,我可以将以下内容替换为:
Dim Log As ILog = GetLog(Me.GetType())

我的问题是三个方面:
  • 是否Me.GetType()实际上返回相同的 TypeGetCurrentMethod().DeclaringType ?
  • 是否Me.GetType()实际上做任何与 GetCurrentMethod().DeclaringType 不同的事情,还是在幕后做同样的事情?
  • 我什至不应该担心这个吗?性能在此应用程序中至关重要;该程序运行良好,但我们的业务性质是这样的,如果我们可以在这里和那里减少甚至几微秒,那就很有用了。
  • 最佳答案

    Me.GetType() 是否返回为 GetCurrentMethod().DeclaringType?

    这取决于。 Me.GetType 将始终返回对象的实际类型。 GetCurrentMethod().DeclaringType 将返回声明方法的类型。这些值在继承方案中可能不同。

    考虑以下

    Class C1
    Public Sub Foo()
    ..
    End Sub
    End Class
    Class C2
    Inherits C1
    ..
    End Class

    如果您正在处理 C1 的实例,则在方法 Foo 中,这两个表达式将是相等的。但如果是C2,他们就会不同。

    Me.GetType() 与 GetCurrentMethod().DeclaringType 有什么不同吗?

    是的,这些是非常不同的功能。 Me.GetType 确定类的当前实例的运行时类型。 GetCurrentMethod.DeclaringType 确定以何种类型声明此方法。

    我什至不应该担心这个吗?

    如果这是一个性能关键场景,那么是的,您确保对您不理解的 API 进行概要分析。尤其是那些似乎涉及反射(reflection)的。但是只有分析器会告诉您哪个绝对更快。我的钱在 Me.GetType 上。

    关于.net - 在(据称)高性能代码中使用 GetCurrentMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1466740/

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