我有一个执行复杂处理并创建太多对象的应用程序,我想在处理完成后释放内存。我目前正在我的应用程序中的 try catch 块中调用 GC.collect,并且// 这个函数在静态类中public static void Collect(){ try { GC.Collect } catch(Exception) { // }}这是调用垃圾收集器的正确方法吗?我应该直接调用它吗?什么是最佳使用实践?
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
C# 是一种垃圾收集语言。垃圾收集器为您分配资源,并在不再使用时回收它们。
GC.Collect()
除非你有充分的理由,否则你根本不应该调用- 垃圾收集器很聪明,并且只会在它认为需要时运行。
这可以由多种情况触发,如文档中所示:
当满足以下条件之一时,就会发生垃圾收集:
系统物理内存不足。这是通过操作系统发出的内存不足通知或主机指示的内存不足来检测的。
托管堆上分配的对象使用的内存超过了可接受的阈值。该阈值随着进程的运行而不断调整。
调用 GC.Collect 方法。在几乎所有情况下,您不必调用此方法,因为垃圾收集器连续运行。此方法主要用于特殊情况和测试。
重要的是,垃圾收集可以导致所有正在运行的线程暂停,以便它可以分析堆中的所有对象以查看它们是否仍然需要。这需要时间,如果您在不需要时频繁运行它,可能会对程序的性能产生负面影响。
慕的地10843
TA贡献1785条经验 获得超8个赞
您不需要将其包装在public static
方法中,只需在需要时调用它即可:
// Time to release memory! GC.Collect();
- 2 回答
- 0 关注
- 413 浏览
添加回答
举报
0/150
提交
取消