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