2012-04-24 79 views
-1

在.NET中,在可伸缩性方面,在静态类中的静态方法和常规类中的实例方法之间会有什么问题需要考虑?静态或实例方法在.NET中扩展更好吗?

如果在一个类中对静态方法进行很多调用,是否会出现“日志堵塞”?或者这不是问题。如果是这样,使用实例方法会更好吗?

就像调用GetCustomers()这样的方法来调用客户数据。

编辑: 问题不是关于对其他问题/答案中解决的每种类型方法的调用性能,而是关于可伸缩性的性能。如果你每秒钟有10K个静态调用,那么静态方法会遇到问题吗?或者没有关系。

回答

1

真的没关系。重要的是该方法是否需要访问该类的特定实例的状态。如果没有,你可以把它变成静态的,如果不是的话就不能。如果你严格要求在理论基础上,那么假设该方法不需要访问实例状态数据,那么显然对于静态方法有一点小的优势,因为你不必在堆上按顺序创建一个无用的对象使用它......如果你将它作为一个实例方法,你将不得不创建一个实例(只有一个实例,因为它不需要任何状态数据,哪个实例或者实例的状态是什么并不重要) - 只有一个实例,无论你需要多少次调用它...

但在一个典型的大小类的一个实例并不是一个繁重的命中......假设这个类(类型)不需要3千兆字节的堆空间!

2

否;它不会有任何真正的区别。

如果不依赖实例,方法应该是static

1

如果方法依赖于特定的对象实例,则静态方法和实例方法在性能方面应该没有区别。如果不需要实例,静态方法可能会稍微快一点。

其原因在于,在内部,实例方法几乎与采用实例参数的静态方法相同。因此,应该没有可衡量的差异。

不需要实例的静态方法几乎肯定会更快,但很少。如果调用具有相同参数的实例方法和静态方法,那么实例方法将需要将一个额外参数推送到堆栈:要运行的实例。

虽然这样做的速度非常小,但使静态非特定于实例的方法通常是一个好主意。如果您需要了解其中的差异,可以对其进行分析,但我猜测会有一个小的信噪比,并且您可能没有学到任何有用的东西。

+0

小建议..你的第一句话写的是错......我会说 如果方法依赖于一个特定的对象实例,那么静态方法和实例方法之间存在巨大差异。 - 静态方法不会编译... – 2012-04-24 01:38:47

相关问题