【发布时间】:2012-08-30 01:19:02
【问题描述】:
我的问题与静态方法与实例方法的性能特征及其可扩展性有关。对于这种情况,假设所有类定义都在一个程序集中,并且需要多个离散指针类型。
考虑:
public sealed class InstanceClass
{
public int DoOperation1(string input)
{
// Some operation.
}
public int DoOperation2(string input)
{
// Some operation.
}
// … more instance methods.
}
public static class StaticClass
{
public static int DoOperation1(string input)
{
// Some operation.
}
public static int DoOperation2(string input)
{
// Some operation.
}
// … more static methods.
}
上面的类代表了一个辅助样式模式。
在实例类中,解析实例方法需要一些时间,这与StaticClass相反。
我的问题是:
当保持状态不是问题(不需要字段或属性)时,使用静态类总是更好吗?
如果有大量这些静态类定义(例如 100 个,每个都有多个静态方法),与相同数量的实例类定义相比,这会对执行性能或内存消耗产生负面影响?
当调用同一个实例类中的另一个方法时,实例解析是否仍然发生?例如,在同一实例的
DoOperation1中使用this.DoOperation2("abc")之类的[this] 关键字。
【问题讨论】:
-
“实例解析”是什么意思?在 IL 级别上,“this”指针与任何其他局部变量一样可用。事实上,在一些旧的 CLR/JIT 版本上,您可以在 NULL 上调用实例方法,前提是它没有触及“this” - 代码只是飞过并崩溃了。现在 CLR/JIT 包含显式的 null-检查每个成员调用..
-
> vijaymukhi.com/documents/books/ilbook/chap8.htm 和“调用实例”而不是“调用”。前者需要“this”参数,而后者不需要。
-
@Quetzalcoatl 很抱歉造成混淆,问题是从同一个实例中获取更多方法,以及是否需要将实例解析为自身。
-
@quetzalcoatl 我以为他的意思是,“当类调用自身的实例方法时,编译器是否会检查
this是否指向某些东西?”
标签: c# performance static-methods il