我有一个应用程序,它将拥有我们拥有的数百万个类的对象。我们需要我们的应用程序在低内存机器上表现良好;因此,我们有一个解决方案,允许我们在磁盘上的文件系统中存储和检索对象。
我想要实现的是一个对象的“搁置”,一旦它被创建并且不使用这么长时间,
一种方法是去除/重建;但我听说GC将长生物移到第二代堆;有什么方法可以告诉GC,对于某种类型的对象,Gen 2堆应该用其他东西替换吗?
答案 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。如果您正在处理数百万个对象,那么我怀疑将对象序列化到磁盘所花费的时间太多了。
最后一点建议是发布具有最低硬件要求的应用程序,这样您就不必担心这一点。