在.NET中,静态类中的静态方法和常规类中的实例方法之间是否存在需要考虑的问题?
如果对类中的静态方法进行了多次调用,是否会出现“log jam”?或者这不是问题。如果是这样,使用实例方法会更好吗?
像调用GetCustomers()这样的方法来调用客户数据。
编辑: 问题不在于对其他问题/答案中已解决的每种方法的调用的性能,而在于可扩展性。如果静态方法与实例方法每秒有10K次调用,静态方法会出现问题吗?或者没关系。
答案 0 :(得分:2)
没有;它不会产生任何真正的不同。
如果方法不依赖于实例,则方法应为static
。
答案 1 :(得分:1)
如果方法依赖于特定的对象实例,则静态方法和实例方法在性能方面应该没有区别。如果不需要实例,静态方法可能会稍快一些。
这样做的原因是,在内部,实例方法的处理方式几乎与采用实例参数的静态方法相同。因此,应该没有可衡量的差异。
不需要实例的静态方法几乎肯定会更快,尽管很少。如果调用实例方法和具有相同参数的静态方法,则实例方法将需要一个额外的参数推送到堆栈:要操作的实例。
将非实例特定方法设为静态通常是个好主意,尽管这样做的速度受益非常小。如果您需要了解其中的差异,可以对其进行分析,不过我猜测它会有很小的信噪比,而您可能无法学到任何有用的东西。
答案 2 :(得分:1)
真的没关系。重要的是该方法是否需要访问该类的特定实例的状态。如果没有,你可以让它静止,如果不是你不能。如果你在理论基础上严格要求,那么假设方法不需要访问实例状态数据,那么显然对静态方法有一个小的改进,因为你不必在堆上创建一个无用的对象使用它...如果你使它成为一个实例方法,你将不得不创建一个实例(只有一个实例,因为它不需要任何状态数据,哪个实例,或实例的状态无关紧要) - 无论您需要多少次调用它,都只有一个实例...
但是典型大小的类上的一个实例并不是一个繁重的命中...假设这个类(类型)不占用3千兆字节的堆空间!