返回介绍

被动回收

发布于 2025-02-23 23:15:45 字数 2090 浏览 0 评论 0 收藏 0

在大多数情况下,垃圾回收器可以确定执行回收的最佳时间,应让其独立运行。 在某些不常见的情况下,强制回收可以提高应用程序的性能。 在这些情况下,你可以通过使用引发垃圾回收 GC.Collect 方法来强制进行垃圾回收。

使用 GC.Collect 方法是在应用程序代码中的特定点正在使用的内存量,大大减少时。 例如,如果你的应用程序使用具有几个控件的复杂对话框框,则调用 Collect 关闭该对话框时可以通过立即回收对话框中使用的内存来提高性能。 请确保应用程序不会过于频繁地引发垃圾回收,否则当垃圾回收器无效率地尝试回收对象时,可能会使性能降低。 你可以提供 GCCollectionMode.Optimized 枚举值到 Collect 方法,以收集仅在下一节中所述,将工作效率,集合时。

GC 回收模式

你可以使用之一 GC.Collect 包括的方法重载 GCCollectionMode 要指定强制回收的行为,如下所示的值。

GCCollectionMode描述
Default正在运行版本的.NET 中使用默认垃圾集合设置。
Forced强制立即执行垃圾回收。 这是等效于调用 GC.Collect() 重载。 它会导致对所有分代进行完全阻塞回收。

你还可以通过设置压缩大型对象堆 GCSettings.LargeObjectHeapCompactionMode 属性 GCLargeObjectHeapCompactionMode.CompactOnce 之前强制立即的完全阻止垃圾回收。
Optimized使垃圾回收器可以确定当前时间是否是回收对象的最佳时间。

垃圾回收器可能判定回收效率不够高,因此回收不合理,在这种情况下将返回而不回收对象。

后台回收或阻塞回收

你可以调用 GC.Collect(Int32, GCCollectionMode, Boolean) 方法重载来指定或不是否阻止被动的集合。 执行回收的类型取决于的方法的组合 modeblocking 参数。 mode 为属于 GCCollectionMode 枚举,和 blocking 是 Boolean 值。 下表总结了 modeblocking 自变量。

modeblocking = trueblocking = false
Forced 或 Default尽快执行阻塞回收。 如果正在进行后台回收,生成是 0 或 1, Collect(Int32, GCCollectionMode, Boolean) 方法立即触发阻碍性回收,并在回收完成时返回。 如果后台回收正在进行和 generation 参数为 2,方法等待后台回收完成,触发阻止第 2 代回收,然后返回。尽快执行回收。 Collect(Int32, GCCollectionMode, Boolean) 方法请求一个后台回收,但这不能保证; 取决于具体情况,可能仍执行阻碍性回收。 如果后台回收正在进行,该方法将立即返回。
Optimized可能执行阻碍性回收,具体取决于垃圾回收器的状态和 generation 参数。 垃圾回收器会尽量提供最佳性能。根据垃圾回收器的状态,有时可执行回收。 Collect(Int32, GCCollectionMode, Boolean) 方法请求一个后台回收,但这不能保证; 取决于具体情况,可能仍执行阻碍性回收。 垃圾回收器会尽量提供最佳性能。 如果后台回收正在进行,该方法将立即返回。

另请参阅

延迟模式
垃圾回收

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文