我们有一个 C# 应用程序,它控制我们的一个设备并对这个设备给我们的信号做出反应。
基本上,应用程序创建线程、处理操作(访问数据库等)并与该设备通信。
在应用程序的生命周期中,它创建对象并释放它们,到目前为止,我们让垃圾收集器处理我们的内存。我读过强烈建议让 GC 在不干扰的情况下完成其工作。
现在我们面临的问题是,我们的应用程序的过程会不断增长,一步一步地增长。例子:
当应用程序增长时似乎有“波”,突然间,应用程序释放了一些内存,但似乎同时留下了内存泄漏。
我们正在尝试使用一些内存分析器来调查应用程序,但我们想深入了解垃圾收集器的工作原理。
你们知道另一个非常深入的 GC 文档吗?
编辑 :
这是说明应用程序行为的屏幕截图:
您可以清楚地看到我们在非常规则的模式上产生的“波浪”效应。
附属问题:
我已经看到我的 GC Collection 2 Heap 非常大,并且遵循与我的应用程序使用的总字节数相同的模式。我想这是完全正常的,因为我们的大多数对象都会在至少 2 次垃圾回收中存活下来(例如 Singleton 类等)......你怎么看?