答案 0 :(得分:3)
没有什么区别。和往常一样,如果你有疑问,请注意 - 但我非常怀疑你会发现任何有趣的东西。
静态方法有三个主要优点:
this
通过不使用virtual
关键字和不实现接口来避免虚方法调用。它们也会在运行时进行评估,并在可能的情况下进行优化。
传递this
对struct
来说可能很棘手,但这并不是你通常实现单身的方式。对于普通引用类型,这可能是一个简单的寄存器引用。
最后一点也应该是显而易见的 - 由于C#中的合同,如果你尝试在null
引用上调用方法,你应该得到一个NullReferenceException
- 即使方法实际上根本不使用this
。
但是,性能不是唯一有用的指标。如果你考虑一下,静态类和静态方法与功能模块和功能几乎没有什么不同。我认为这是最初的文章提到的最重要的 - 如果做得对,函数式编程比尝试将代码放入某些任意定义的类要简单得多。我假设虽然有很多静态方法(函数),但是很少有静态字段 - 如果它们失控,状态变化可能很难管理和理解。这对于共享状态来说是双重的,并且你很难找到一些比公共静态字段更多共享的状态。
再次 - 表演只是一件事。软件开发是一种平衡行为,并不专注于一个指标。如果您过分关注(低级别)性能,则可能会错过维护和可读性,甚至是高级性能优化。如果避免开销是至关重要的,那么继续 - 使用静态字段和静态方法。如果您需要并行处理10k请求,则可能需要进行大量的低级优化。但请确保您知道这通常是一种权衡。
答案 1 :(得分:0)
如果您正确实施单身,那么我会说没有性能差异。
唯一的区别在于标准静态,您可以随时打开系统来创建新实例,而Singleton强制它只创建一次。