是否有必要通过在c#中将obj设置为null来释放内存?

Eri*_*Yin 3 c# memory asp.net

可能重复:
在.NET中使用后将对象设置为Null/Nothing
您是否需要处理对象并将其设置为null?

对于大型或高流量网站:

第一个问题:

将设置Object=null(不是Disposable)释放内存?或者是释放记忆的其他方式?

第二个问题:

在正常代码中是否需要显式释放内存?

Ry-*_*Ry- 6

不,它不会立即执行,不,如果您以正确的方式编写代码通常是不必要的.

如果你有一个实现的资源IDisposable,调用Dispose()它,甚至更好,把它放在一个using(...)块中 - 它会更快,并将释放适当的资源.如果同一作用域中有多个大对象不是COM对象或者没有实现某种形式的处理机制,请执行以下操作:

someObject = null;
GC.Collect();
Run Code Online (Sandbox Code Playgroud)

可能有所帮助,但你可能最好重组你的代码,这样你就不会在那种情况下结束.

如果你在对象超出范围之前这样做,那就完全是多余的了,会让事情变得更糟.如果您null在终结器中设置了更多内容.例如,永远不要这样做:

public void aFunction() {
    SomeThing anObject = new SomeThing();
    // ...
    anObject = null;
}
Run Code Online (Sandbox Code Playgroud)

也不是这样

public ~MyClass() {
    this.Something = null; // WRONG!
    this.SomethingElse.Dispose(); // DANGEROUS!
    this.SomeObject.Notify("I got finalized!"); // ALSO DANGEROUS!
}
Run Code Online (Sandbox Code Playgroud)

而且,为了完整起见,你这样做:

Marshal.ReleaseComObject(someObj);
Run Code Online (Sandbox Code Playgroud)

释放COM对象.