C#静态函数是否比非静态函数执行更好,超越了内存使用的减less?

我认为publicprivate static目标必须减less内存使用量,因为在内存中只有一个静态目标副本。

这似乎是因为一种方法是静态的,可能会使该方法成为CLR编译器进一步优化的一个潜在的点,超出了使用非静态函数的可能性。 只是一个脆弱的理论,所以我来问你们所有人。

static publicprivate方法提供了更多的性能优势,而不仅仅是减less内存使用量

(注意:我对那些谈论过早优化问题的反应并不感兴趣,当然这是我每天所遵循的合理build议,但这并不意味着有时候优化是不必要的(双重否定!)。让我放纵我的好奇心,至less)

从静态类和静态类成员(C#编程指南)

对静态方法的调用会在Microsoft中间语言(MSIL)中生成调用指令,而对实例方法的调用将生成callvirt指令,该指令还将检查空对象引用。 但是,大部分时间两者之间的performance差异并不显着。

除了旁观者所说的,你的问题表明了对实例方法所做的误解。 无论函数是否为静态,内存中只有一个函数代码的副本。 一个非静态的方法必须通过一个对象来调用,但是这个对象不会携带它自己的私有方法副本。 因此,静态和非静态方法的内存使用情况实际上是相同的,正如其他人已经指出的那样,性能特征几乎是相同的。

但是,对于您创build的每个对象,非静态成员variables都是分开存在的。 但是,除非在程序中实际存在与内存相关的问题,否则几乎总是会浪费时间来担心内存使用情况。

这有点偏离主题,但不是那么重要。

制作方法的静态实例的select不应该基于执行时间(无论如何似乎无关紧要)。 它应该基于该方法是否在一个对象上运行。 例如,所有Math。*方法都是静态的,例如(大多数)String。*方法是实例,因为它们在String实例上运行。 我的个人理念: 好的devise应该弥补可能在其他地方保存的几个周期

关于这个问题的另一种观点:我最近和一个被告知静态方法是邪恶的人一起工作,因为他们把我们带回了程序性编程的黑暗时代,因此应该不惜一切代价避免。 这导致了一些奇怪的例子,这些例子需要实例来访问对象的内部完全不感兴趣的方法。

唷,从炉子里拿出来感觉很好。

好的答案 – 基本上没关系,几乎所有问题的答案都是这样的。 即使它确实有所作为 – 如果你的程序的执行时间花了一美元,这类问题可能花费一分钱, 很可能还有其他的东西花费更多 。

衡量一切 ,但你会发现,除非你正在创造一个全球范围的超大容量交易处理超级计算集群,它不会有明显的差异。