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

2023-11-23

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

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

我对反思有一种可以说是非理性的恐惧,我试图控制这种恐惧。然而,每秒可能执行一百次的方法中的此类调用令我担心。我对反思的了解还不够多。但通过简要浏览文档,在我看来我可以将以下内容替换为:

Dim Log As ILog = GetLog(Me.GetType())

我的问题有三个:

  1. Does Me.GetType()实际上返回相同的Type as GetCurrentMethod().DeclaringType?
  2. Does Me.GetType()实际上做任何事不同地 from GetCurrentMethod().DeclaringType,或者它在幕后做着同样的事情?
  3. 我根本不应该担心这个吗?在此应用中,性能至关重要;该程序runs很好,但我们业务的性质是这样的,如果我们能在这里或那里减少哪怕几微秒,那就很有用了。

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。尤其是那些看起来涉及反思的内容。但只有分析器才能告诉您哪个绝对更快。不过我的钱在 Me.GetType 上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在(据称)高性能代码中使用 GetCurrentMethod 的相关文章

  • WinDbg中出现“SOS版本与您正在调试的CLR版本不匹配”怎么办?

    我的某些应用程序出现问题 它是一个基于 wcf 的应用程序 在 Windows 2003 Server x86 的 IIS6 下运行 在事件日志中 我从 W3SVC WP 源 EventID 2262 收到这样的错误 ISAPI C WIN
  • 返回没有属性名称的 Json 结果

    很可能是一个相当微不足道的问题 但我就是找不到合适的答案 我想返回一个 JsonResult 但实际结果没有任何属性名称 这是我想要实现的一个小例子 xbox Xbox 360 Xbox cheats Xbox 360 games The
  • 如何阻止访问任何文件或exe vb.net?

    如何阻止和取消阻止文件或可执行文件在 vb net 运行时永久打开 您可以使用此代码 并且可以使用Environment UserName获取用户名 这将锁定任何类型的文件 也将锁定文件夹 Dim FSS As FileSystemSecu
  • Linq:Select 和Where 之间有什么区别

    The Select and WhereLinq 中提供了方法 对于这两种方法 每个开发人员都应该了解什么 例如 何时使用其中一种而不是另一种 使用一种相对于另一种的优势等 Where 查找匹配的项目并仅返回匹配的项目 过滤 gt IEnu
  • VB.NET 中共享变量有什么用?

    有什么用SharedVB NET 中的变量 它是一样的static在 C 和大多数其他语言中 这意味着类中的每个对象都使用变量 属性或方法的相同副本 当与静态方法一起使用时 您不需要对象实例 MyClass DoSomething 而不是
  • 对大数据块进行反应非阻塞渲染

    最近我开始学习反应并想知道是否有某种模式可以用于大数据的非阻塞 UI 线程渲染 比方说 我们采取这个例子 https www mendix com tech blog making react reactive pursuit high p
  • 将绝对路径转换为相对路径 C# [重复]

    这个问题在这里已经有答案了 可能的重复 获取相对于当前工作目录的路径 https stackoverflow com questions 703281 getting path relative to the current working
  • 具有类类型的 Java 反射 getDeclaredMethod()

    我试图理解 Java 反射 但在使用非整数 setter 方法时遇到困难 例如 如何解析下面的 getDeclaredMethod 调用 import java lang reflect class Target String value
  • 在 JavaScript 中嵌套“switch”案例:有速度优势吗?

    这里有新手问题 我有一个包含大量字符串的 开关 像这样按字母顺序拆分是否有速度优势 switch myString substring 0 1 case a switch myString case a string beginning w
  • 如何在.NET中扩展环境变量%CommonProgramFiles%\system\

    我遇到一种情况 我需要通过读取注册表设置来返回目录路径 注册表值返回我以下格式的路径 CommonProgramFiles System web32 dll 而消费者代码期望它的格式为 C Program Files Common File
  • 在程序集“SMSApp”中发现了不止一种迁移配置类型。指定要使用的名称

    我正在使用代码优先方法开发 mvc 5 应用程序 我面临一个问题 第一次当我尝试下面的命令时 它起作用并在该数据库中生成表 但是当我更改了更多类 然后尝试前两个查询时 它在这种情况下有效 但是当我尝试第三个命令时 它给了我这条消息 Firs
  • NET/COM 互操作的 ref string[] 内存泄漏

    我最近发现一个非常奇怪的 对我来说 内存泄漏IEnumString http msdn microsoft com en us library ms693735 28VS 85 29 aspxC 使用的 COM 对象 具体来说 使用已包含先
  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • GC.Add MemoryPressure() 如何知道要向哪个对象添加内存压力?

    我最近需要使用GC 添加内存压力 http msdn microsoft com en us library system gc addmemorypressure aspx令我感到奇怪的是 它不接受添加内存压力的对象作为参数 我认为因为它
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 如何添加重试以调用 Web 服务?

    我有一个应用程序调用使用 wsHttpBinding 的 Web 服务 我需要在连接超时等情况下对 Web 服务调用实现某种重试功能 执行此操作的最佳方法是什么 我已经阅读过有关 WS ReliableMessaging 的内容 但这不是
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • Windows 服务:错误 5:访问被拒绝

    我正在尝试创建一个简单的 Windows 服务 该服务的用户帐户是NetworkService 然后我跑了installUtil从命令提示符我得到了这个 提交阶段完成 成功地 事务安装已完成 这意味着服务已成功安装 但是当我尝试从Servi
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐