如何在.NET中释放内存?

如何在.NET中释放内存?,.net,garbage-collection,.net,Garbage Collection,如何在.NET中释放内存?这样做是否正确: myArray = null; GC.Collect(); 或 或者我应该一直等到操作系统准备就绪时进行垃圾收集吗 谢谢。这些都不是你想要的。 在托管运行时中,释放引用使用的内存是不确定的,它完全取决于垃圾收集器何时运行以及使用哪个策略。 因此,对于常规类型,不要做任何事情,只需放松并编写业务代码。这些都不能满足您的需要。 在托管运行时中,释放引用使用的内存是不确定的,它完全取决于垃圾收集器何时运行以及使用哪个策略。 因此,对于常规类型,不要做任何事

如何在.NET中释放内存?这样做是否正确:

myArray = null;
GC.Collect();

或者我应该一直等到操作系统准备就绪时进行垃圾收集吗


谢谢。

这些都不是你想要的。 在托管运行时中,释放引用使用的内存是不确定的,它完全取决于垃圾收集器何时运行以及使用哪个策略。
因此,对于常规类型,不要做任何事情,只需放松并编写业务代码。

这些都不能满足您的需要。 在托管运行时中,释放引用使用的内存是不确定的,它完全取决于垃圾收集器何时运行以及使用哪个策略。
因此,对于常规类型,不要做任何事情,只需放松并编写业务代码。

作为最佳实践,只需等待GC收集未使用的资源。GC足够智能,可以知道何时应该进行收集。强制GC运行要付出高昂的代价。

作为一种最佳实践,只需等待GC收集未使用的资源即可。GC足够智能,可以知道何时应该进行收集。强制GC运行要付出巨大的代价。

根据GC.Collect()上的MSDN页面:

所有对象,不管它们在内存中的时间有多长,都会被考虑收集;但是,不会收集托管代码中引用的对象。使用此方法可强制系统尝试回收最大可用内存量


这表明,如果没有其他引用,则删除引用的内存可能会被释放。不过,您应该知道,该函数可能需要很长时间才能运行(从程序的角度来看),因此您可能不想自己调用它:如果您尝试过多地调用它,可能会导致不必要的冗余工作,并显著降低应用程序的速度。如果这是有益的,它应该很快就会发生。如果你真的想要确定性的破坏,考虑在C++中使用一个C++,使用“真实”堆代替GC ED。 所有对象,不管它们在内存中的时间有多长,都会被考虑收集;但是,不会收集托管代码中引用的对象。使用此方法可强制系统尝试回收最大可用内存量


这表明,如果没有其他引用,则删除引用的内存可能会被释放。不过,您应该知道,该函数可能需要很长时间才能运行(从程序的角度来看),因此您可能不想自己调用它:如果您尝试过多地调用它,可能会导致不必要的冗余工作,并显著降低应用程序的速度。如果这是有益的,它应该很快就会发生。如果你真的想要确定性的破坏,考虑把C++加上“真正的”堆而不是GC的一个。

为什么你不应该关心,而应该放松并继续编写你的代码,因为它已经被

为什么你不关心,相反,请放松并继续编写代码,因为它已经由

处理,您只需要处理非托管对象,而不需要。垃圾收集器将为您执行此操作。您只需要处置非托管对象,而不需要。垃圾收集器将为您执行此操作。
myArray = Nothing
GC.Collect()