c# - 使方法静态可以提高性能,在什么情况下?

标签 c# .net performance calling-convention

什么时候,如果有的话,将参数作为参数传递给静态方法比让方法是非静态的并通过实例成员访问相同的值更快。假设该方法以只读方式访问这些成员。

在所有其他条件相同的情况下,调用静态方法是 slightly faster而不是调用实例方法。

在所有其他条件相同的情况下,调用不带参数的方法比调用带参数的方法稍微快一些。

考虑:

private Thing _thing;

void DoTheThing()
{
    _thing.DoIt();
}

与这个等效代码相比:

private Thing _thing;

// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
    thing.DoIt();
}

我想不出这种优化会真正增加任何值(value)的现实情况,但作为一个思想实验(对于那些喜欢讨论这种事情的人),是否真的有好处,并且如果是这样,那么有多少论点(什么类型等)使天平向相反方向倾斜?

是否还有其他因素会考虑这一点?例如,静态方法将 _thing 作为局部变量而不是字段进行访问。

最佳答案

我可以想到一个可能的性能优势(对于非虚拟方法):静态方法不需要先测试引用是否为空(抛出 NullReferenceException 在适当的地方)。

认为目前这不会带来任何优势,但这是可能的。不过,我不确定它是否适用于您的特定示例 - 并且很难看出它如何适用于您实际想要使用该值的任何情况。

关于c# - 使方法静态可以提高性能,在什么情况下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573589/

相关文章:

c# - 是否有使用 WebDAV 查询 Exchange 服务器的日历项的工作示例?

c# - XmlDocument 无法从 ZipArchive 条目加载流

c# - 带有异步 lambda 和 Task.WaitAll 的 Task.Factory.StartNew

Linux Hadoop 服务监控工具,如果宕机则重新启动

asp.net - 使用 Date 与 DateTime 时是否需要考虑性能或存储差异?

mysql - 为什么使用mysqldump导入数据后会出现固定的block size write?

c# - 在运行时加载程序集

c# - 将 ApplicationFrameHost 托管的 UWP 应用程序连接到它们的实际进程

c# - 如何在 Protobuf 中实现 VARIANT

c# - "if x in array"的 nvelocity/C# 等价物是什么?