.Net Gen2垃圾收集并没有完全回收Gen 2堆

时间:2017-04-27 11:38:29

标签: c# .net memory-leaks garbage-collection

事实:

  1. 我的应用程序托管在IIS8(Windows Server 2012)
  2. .Net版本为4.6.1,因此使用的GC风格为后台服务器
  3. 第2代堆大小,应用程序提供流量后15分钟, 12gb (非常合理,因为我们的应用程序拥有大量数据)。
  4. 为交通服务六天后:
    • " Gen 2堆大小" counter 17gb
    • "#Gen 2 collection"计数器是3600(这意味着每2.5分钟有一次完整的gc循环,这对我们有好处)
    • 平均Gen2收集大约需要 300ms
    • 调用 GC.Collect(2,GCCollectionMode.Forced)将第2代堆大小减少为 12gb (使用API​​手动调用)
    • 诱导GC收集需要〜3秒(可能是因为它被阻止而不是背景)。
  5. 显然,我们的应用程序中没有内存泄漏,因为导致GC缩小堆大小。

    似乎诱导GC循环比常规GC循环更多工作但似乎找不到任何相关信息。

    问题是:

    为什么常规背景Gen2集合没有将Gen2堆缩回到正常数字,同时诱导GC呢?

    由于

0 个答案:

没有答案