在性能方面,这样做有什么不同吗?:
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
实例会对内存产生影响吗?
使用参数Function
调用StaticTestClass
会对性能产生影响吗?
使用1000000000
次迭代并在每次迭代中创建ConstructedClass
。
静态方式:72542ms
构建方式:83579ms
在这种情况下,静态方式更快,然后我每次调用Function()
时都尝试不创建类,结果如下:[100000000 samples
]
静态方式:7203ms
构建方式:7259ms
在这种情况下几乎没有区别所以我想我可以做任何我最喜欢的事情,因为我不会创建100,000个类的实例。
答案 0 :(得分:2)
技术上是的,静态方法每次调用会稍微快一些,因为静态方法不必检查并查看它所连接的对象(因为它没有)是否已被实例化。这发生在幕后。 (从技术上讲,设置对象等会有其他轻微的开销。)
在大多数情况下,选择一个而不是另一个并不是一个很好的理由。他们有不同的目的。静态方法不能像对象一样维护内部变量的状态等。
在你的情况下,我可能会选择静态方法。根据您显示的代码,您不需要维护对要执行某些操作的对象的引用。对它执行一项功能,并完成它。
使用另一种方法,您必须创建一个对象,然后调用该方法。此外,在设置方式时,您必须为必须执行操作的每个目标对象实例化一个新对象,因为存在于该方法所依据的私有变量中的引用。对我来说,从可读性的角度来看,这会更加混乱。
答案 1 :(得分:1)
一个区别是,生成的对象必须被垃圾收集。静态调用不会产生这种开销。
我测试了100000000次迭代: