静态和单例类性能之间有什么区别(内存管理)

时间:2015-09-23 11:47:42

标签: c# memory-management

我阅读了this关于https://stackoverflow.com/的文章,请注意这句话:

  

为了简单和更好,大量使用静态类和方法   性能

我的问题是,静态和单身性能之间有什么区别吗? 如果有原因?

2 个答案:

答案 0 :(得分:3)

没有什么区别。和往常一样,如果你有疑问,请注意 - 但我非常怀疑你会发现任何有趣的东西。

静态方法有三个主要优点:

  • 无需传递隐式this
  • 没有虚拟方法调用
  • 无空检查

通过不使用virtual关键字和不实现接口来避免虚方法调用。它们也会在运行时进行评估,并在可能的情况下进行优化。

传递thisstruct来说可能很棘手,但这并不是你通常实现单身的方式。对于普通引用类型,这可能是一个简单的寄存器引用。

最后一点也应该是显而易见的 - 由于C#中的合同,如果你尝试在null引用上调用方法,你应该得到一个NullReferenceException - 即使方法实际上根本不使用this

但是,性能不是唯一有用的指标。如果你考虑一下,静态类和静态方法与功能模块和功能几乎没有什么不同。我认为这是最初的文章提到的最重要的 - 如果做得对,函数式编程比尝试将代码放入某些任意定义的类要简单得多。我假设虽然有很多静态方法(函数),但是很少有静态字段 - 如果它们失控,状态变化可能很难管理和理解。这对于共享状态来说是双重的,并且你很难找到一些比公共静态字段更多共享的状态。

再次 - 表演只是一件事。软件开发是一种平衡行为,并不专注于一个指标。如果您过分关注(低级别)性能,则可能会错过维护和可读性,甚至是高级性能优化。如果避免开销是至关重要的,那么继续 - 使用静态字段和静态方法。如果您需要并行处理10k请求,则可能需要进行大量的低级优化。但请确保您知道这通常是一种权衡。

答案 1 :(得分:0)

如果您正确实施单身,那么我会说没有性能差异。

唯一的区别在于标准静态,您可以随时打开系统来创建新实例,而Singleton强制它只创建一次。