静态方法或实例方法在 .NET 中是否更好地缩放

本文关键字:是否 更好 缩放 NET 实例方法 静态方法 | 更新日期: 2023-09-27 18:32:12

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

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

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

编辑:问题不在于对每种类型方法的调用的性能,这在其他问题/答案中已经解决,而是关于可伸缩性。如果每秒对静态方法与实例方法有 10K 次调用,静态方法会有问题吗?还是没关系。

静态方法或实例方法在 .NET 中是否更好地缩放

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

如果方法不依赖于实例,则应static方法。

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

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

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

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

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

通常,将

非实例特定方法设置为静态是一个好主意,尽管这样做对速度的好处非常小。如果你需要知道其中的区别,你可以分析它,尽管我猜会有一个很小的信噪比,你可能不会学到任何有用的东西。