-1

在 .NET 中,静态类中的静态方法和常规类中的实例方法之间是否存在关于可伸缩性的问题?

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

类似于调用 GetCustomers() 来检索客户数据的方法。

编辑:问题不在于调用其他问题/答案中已解决的每种方法的性能,而是关于可伸缩性。如果您每秒对静态方法与实例方法进行 10K 调用,那么静态方法会出现问题吗?或者没关系。

4

3 回答 3

2

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

方法应该是static如果它们不依赖于实例。

于 2012-04-24T00:35:48.283 回答
1

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

这样做的原因是,在内部,实例方法的处理方式几乎与采用实例参数的静态方法相同。因此,应该没有可测量的差异。

不需要实例的静态方法几乎肯定会更快,尽管很少。如果一个实例方法和一个具有相同参数的静态方法被调用,实例方法将需要一个额外的参数压入堆栈:要操作的实例。

将非实例特定方法设为静态通常是个好主意,尽管这样做带来的速度收益非常小。如果您需要知道差异,您可以对其进行分析,尽管我猜信噪比会很小,并且您可能不会学到任何有用的东西。

于 2012-04-24T00:39:17.827 回答
1

真的没关系 重要的是该方法是否需要访问该类的特定实例的状态。如果没有,您可以将其设为静态,否则您不能。如果您在理论上严格要求,然后假设该方法不需要访问实例状态数据,那么显然静态方法有一个小优势,因为您不必在堆上创建无用的对象按顺序使用它...如果您将其设为实例方法,则必须创建一个实例(只有一个实例,因为它不需要任何状态数据,哪个实例或实例的状态无关紧要) - 无论您需要调用多少次,都只有一个实例......

但是一个典型大小的类上的一个实例并不是一个沉重的打击......假设这个类(类型)不占用 3 GB 的堆空间!

于 2012-04-24T01:34:35.010 回答