有没有办法修改我的类对象的GC行为

时间:2013-09-06 05:12:15

标签: c# .net memory-management

我有一个应用程序,它将拥有我们拥有的数百万个类的对象。我们需要我们的应用程序在低内存机器上表现良好;因此,我们有一个解决方案,允许我们在磁盘上的文件系统中存储和检索对象。

我想要实现的是一个对象的“搁置”,一旦它被创建并且不使用这么长时间,

一种方法是去除/重建;但我听说GC将长生物移到第二代堆;有什么方法可以告诉GC,对于某种类型的对象,Gen 2堆应该用其他东西替换吗?

1 个答案:

答案 0 :(得分:2)

我做了一些研究,从.Net 4开始,您可以使用ETW to detect garbage collection ETW events

  

Windows事件跟踪(ETW)是一个补充的跟踪系统   .NET Framework提供的分析和调试支持。   从.NET Framework 4开始,garbage collection ETW events   捕获用于分析托管堆的有用信息   统计学观点。例如,GCStart_V1事件,即   垃圾收集即将发生时提出,提供   以下信息:

  • 正在收集哪一代对象
  • 触发垃圾回收的原因。
  • 垃圾收集类型(并发或非并发)。

首先,我建议您使用CLR Profiler快速查看Managed Heap。如果您正在处理数百万个对象,那么我怀疑将对象序列化到磁盘所花费的时间太多了。

最后一点建议是发布具有最低硬件要求的应用程序,这样您就不必担心这一点。