Mar*_*ers 42 c# optimization performance static keyword
我假设public或者private static目标必须减少内存使用量,因为内存中只有一个静态目标副本.
这似乎是因为一个方法是静态的,可能使该方法成为CLR编译器进一步优化的潜在点,超出了非静态函数的可能性.虽然只是一个脆弱的理论,所以我来问你们所有人.
做static public或private方法提供了超越减少内存使用量增加的任何性能优势?
(注意:我对那些谈论过早优化问题的回答不感兴趣.当然,这是我每天都遵循的合理建议,但这并不意味着有时不需要优化.(双重否定!).让我放纵我的好奇,至少)
Adr*_*der 51
对静态方法的调用会生成Microsoft中间语言(MSIL)中的调用指令,而对实例方法的调用会生成callvirt指令,该指令还会检查空对象引用.但是,大多数时候两者之间的性能差异并不显着.
JSB*_*ոգչ 24
除了旁观者所说的,你的问题表明对方法的实际存在误解.无论函数是否为静态函数,内存中只有一个函数代码副本.必须通过对象调用非静态方法,但该对象不携带自己的方法私有副本.因此,静态和非静态方法的内存使用实际上是相同的,正如其他人所指出的那样,性能特征几乎相同.
但是,对于您创建的每个对象,非静态成员变量都会单独存在.但是担心内存使用几乎总是浪费时间,除非你的程序中确实存在与内存相关的问题.
Chr*_*sen 18
这有点偏离主题,但同样重要.
制作方法静态或实例的选择不应该基于执行时间(无论如何似乎无关紧要).它应该基于该方法是否对某个对象进行操作.例如,所有Math.*方法都是静态的,而例如(大多数)String.*方法是实例,因为它们在String实例上运行.我的个人理念:良好的设计应该弥补可能在其他地方保存的少数周期.
关于这个问题的另一种观点:我最近与一个被告知静态方法是邪恶的人合作,因为他们把我们带回了程序式编程的黑暗时代,因此应该不惜一切代价避免.这导致了类的奇怪示例,这些类需要实例来访问对象内部完全没有兴趣的方法.
哎呀,从壁炉里拿出来感觉很好.