gpt4 book ai didi

c# - Utility/Helper 无状态静态类与无状态非静态类

转载 作者:太空狗 更新时间:2023-10-30 01:23:10 26 4
gpt4 key购买 nike

从内存分配的角度来看,创建无状态静态实用程序类与无状态非静态实用程序类之间有什么区别吗?根据我的理解,静态类实际上可能更好,因为不会在 GC 堆上分配任何对象。只有方法表将在高频堆上创建,而对于非静态类,将在 GC 堆上创建对象以及 HF 堆上的方法表。需要你们的帮助来确认它,如果我遗漏了任何其他注意事项,请告诉我。

最佳答案

是的。如果方法都是静态的,那么托管堆上不会有任何实例。每次调用时,您将直接引用该类型并访问它的成员,而无需在堆上分配内存。

如果你有一个实例类,那么每次你创建一个实例时,你都会在堆上产生成本。如果您也没有坚持引用,那么您将在 CLR 的第 0 代中有很高的流失率。这假设您将创建大量对象来进行这些调用。

当然,如果您正在实现 the singleton pattern那么成本就会很小,因为您只需要实现对象的单个实例。

然而,这一切都没有实际意义,因为它是一个 micro optimization ;除非您发现自己创建了过多的这些对象来执行此功能,并且通过分析确定您确实有问题,否则这应该是最容易维护的问题。

不过我要说的是,如果一个方法是无状态的,并且它自然看起来会在现有类型上运行,那么我通常会写一个 extension method ;这是一个静态调用,但给出了实例调用的外观,对于某些人(和我个人)来说,它的代码流程比直接从类型调用静态方法要好得多(尤其是当它使我能够设计一个 fluent interface ).

关于c# - Utility/Helper 无状态静态类与无状态非静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com