C# 静态类与具有构造函数性能的类

C# 静态类与具有构造函数性能的类,c#,performance,class,constructor,static,C#,Performance,Class,Constructor,Static,在性能方面,这样做有什么区别吗 public static Class StaticTestClass() { public static void Function(object param) => //Do stuff with "param" } 这是: public Class ConstructedTestClass() { private object classParam; public ConstructedTestClass(object p

在性能方面,这样做有什么区别吗

 public static Class StaticTestClass()
 {
   public static void Function(object param) => //Do stuff with "param"
 }
这是:

 public Class ConstructedTestClass()
 {
   private object classParam;
   public ConstructedTestClass(object param)
   {
    classParam = param;
   }
   public void Function() => //Do stuff with "classParam"
 }
我认为如果只做一次,性能不会有任何不同,但是如果我必须做很多次,并且多次调用
Function()
,该怎么办

拥有多个
ConstructedTestClass
实例是否会影响内存

使用参数调用
StaticTestClass
函数是否会影响性能

PS:也有类似的问题,但我找不到一个能在多次通话中表现出色的问题

编辑:我做了一些测试,结果如下:

使用
100000000
迭代,并在每次迭代中创建
ConstructedClass

静态方式:
72542ms

构造方式:
83579ms

在这种情况下,静态方式更快,然后我尝试在每次调用
Function()
时不创建类,结果如下:[
100000000个示例
]

静态方式:
7203ms

构造方式:
7259ms


在这种情况下几乎没有区别,所以我想我可以做任何我最喜欢的事情,因为我不会创建100000000个类实例

一个区别是,必须对生成的对象进行垃圾收集。静态调用不会产生这种开销

我测试了100000000次迭代:

  • 静态版本大约需要0.7秒
  • 非静态版本(一次性创建实例并调用方法n 时间)大约需要0.7秒
  • 非静态版本(每次调用创建一个实例)需要约1.4秒

从技术上讲是的,静态方法每次调用都会稍微快一点,因为静态方法不必检查它所附加的对象(因为它没有)是否已实例化。这是在幕后发生的。(从技术上讲,将有其他轻微的开销来设置对象等)

不过,在大多数情况下,这并不是选择其中一个而不是另一个的好理由。它们有不同的目的。静态方法不能像对象一样维护内部变量的状态

在您的情况下,我可能会选择静态方法。根据您展示的代码,您并不真正需要维护对您想要执行某些操作的对象的引用。在它上面执行一个功能,并完成它


使用另一种方法,您必须创建一个对象,然后调用该方法。此外,按照它的设置方式,您必须为必须对其执行操作的每个目标对象实例化一个新对象,因为该方法所作用的私有变量中存储了一个引用。对我来说,从可读性的角度来看,这会更令人困惑。

你说过很多次。。但是有多少?它可能不会太多而产生影响。要比较这两种方法,只需尝试一下,然后使用
Stopwatch
类来测量时间。有许多类似的问题很容易重复。但更重要的是,您是否实际分析了代码,以查看是否存在足够的差异?我的猜测是,如果你有过,你会发现差异非常小,几乎不可能正确测量。你最好设计合适的应用程序,而不是担心这种级别的微优化@空:请将您的测量结果作为答案发布。。。这不是你的问题。调用函数不受垃圾收集的影响。事实上,在应用程序的生命周期内,您可以在同一实例上调用该函数。如果参数发生更改,则不会调用,因为它已传递给构造函数。我自己正在进行测试,我将编辑问题并发布结果。很好,我期待看到您的结果:)。