Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实用程序/助手无状态静态类与无状态非静态类_C#_.net - Fatal编程技术网

C# 实用程序/助手无状态静态类与无状态非静态类

C# 实用程序/助手无状态静态类与无状态非静态类,c#,.net,C#,.net,从内存分配的角度来看,创建无状态静态实用程序类和创建无状态非静态实用程序类之间有什么区别吗?根据我的理解,静态类实际上可能更好,因为GC堆上不会分配任何对象。只在高频堆上创建方法表,而对于非静态类,将在GC堆上创建对象,并在HF堆上创建方法表。需要你们的帮助来确认,如果我遗漏了任何其他注意事项,请告诉我。是的。如果这些方法都是静态的,那么托管堆上就不会有实例。每次调用时,都将直接引用该类型并访问其成员,而无需在堆上分配内存 如果您有一个实例类,那么每次创建实例时,都会在堆上产生成本。若您也并没有

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

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

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

当然,如果您正在实现,那么成本将很小,因为您只需要实现对象的单个实例

然而,这一切都是毫无意义的,因为这是一个问题;除非您发现自己创建了大量的这些对象来执行此功能,并且通过分析确定您确实存在问题,否则这应该是最容易维护的问题


不过我会说,如果一个方法是无状态的,并且它看起来自然像是在现有类型下运行的,那么我通常会编写一个;这是一个静态调用,但给出了一个实例调用的外观,对于某些人(以及我个人)来说,它的代码流比直接从类型中调用静态方法要好得多(特别是当它使我能够设计一个实例时)。

的确。。。您需要对非静态类进行多少次实例化?@spender:我认为这就是需要建议的地方。非静态类必须实例化才能访问任何成员,而静态类则没有任何此类要求。非静态类可以实现为singleton类,以避免多个实例,因为空对象消耗12字节的内存,但如果类由纯实用程序成员组成,则这似乎不值得付出努力。非常感谢!扩展方法绝对是实现helper方法的更好方法。