【发布时间】:2011-01-21 20:16:28
【问题描述】:
C# 或其他语言如何处理这两种情况之间的内存分配(和内存解除分配):
1.) 调用静态类的方法。
public Program {
Foo foo = Loader.load();
}
public static Loader {
public static Foo load() {
return new Foo();
}
}
2.) 在实例上调用方法,然后超出范围。
public Program {
Foo foo = new Loader().load();
}
public Loader {
public Foo load() {
return new Foo();
}
}
我想静态类已加载并保留在内存中;而类实例在 C# 闲暇时屈服于垃圾收集。这两种范式有什么优点或缺点吗?是否曾经有过一个永远不需要实例化的类(即某种资源加载器或工厂),但您仍然使用第二种方法来利用垃圾收集的情况?
我的问题的重要部分是,第一范式虽然在某些情况下在概念上是正确的,但是否可能会因不必要地保留记忆而受到影响。
【问题讨论】:
-
第二个例子对我来说似乎不正确。调用静态方法需要一个以类名作为前缀的它。例如
Loader.Load()& 不是new Loader().Load() -
你说得对,Shah - 你不需要实例来调用静态方法。这有点意思:)
-
啊,你们是对的,谢谢,我已经改写了它以了解我试图问的问题的实质。
-
我认为他的意思是,拥有一个更大的静态类然后创建一个新实例并调用该实例的方法,然后让 GC 收集它的开销。
-
简洁是智慧的灵魂,感谢5个字完美总结我的问题,哈哈。
标签: c# memory-management static-methods