事实:
- 我的应用程序托管在IIS8(Windows Server 2012)
中
- .Net版本为4.6.1,因此使用的GC风格为后台服务器
- 第2代堆大小,应用程序提供流量后15分钟, 12gb (非常合理,因为我们的应用程序拥有大量数据)。
- 为交通服务六天后:
- " Gen 2堆大小" counter 17gb
- "#Gen 2 collection"计数器是3600(这意味着每2.5分钟有一次完整的gc循环,这对我们有好处)
- 平均Gen2收集大约需要 300ms
- 调用 GC.Collect(2,GCCollectionMode.Forced)将第2代堆大小减少为 12gb (使用API手动调用)
- 诱导GC收集需要〜3秒(可能是因为它被阻止而不是背景)。
醇>
显然,我们的应用程序中没有内存泄漏,因为导致GC缩小堆大小。
似乎诱导GC循环比常规GC循环更多工作但似乎找不到任何相关信息。
问题是:
为什么常规背景Gen2集合没有将Gen2堆缩回到正常数字,同时诱导GC呢?
由于