C# – GC.GetTotalMemory()问题

我正在创建一个基于C#的Windows服务,它将在几个月内全天候运行。 我希望能够跟踪我的服务的一般内存使用情况。 它不需要精确到字节。 分配的一般金额就足够了。 我将监视内存消耗的趋势。 GC.GetTotalMemory()是否适合监控此方法?

我知道性能监视器和计数器的使用。 但是,此服务将在至少12个不同的服务器上运行。 我不想在12个不同的服务器上跟踪PM。 该服务将从所有实例中将所有性能和内存使用信息保留到中央数据库,以避免这种情况,并便于分析。

只有它是一个纯粹的托管内存应用程序。 如果其中任何一个调用非托管代码,那么在那里分配的内存将永远不会在垃圾收集器中注册(除非有人记得调用GC.AddMemoryPressure )。

GC.GetTotalMemory检索想要分配的内存量。 它只知道托管组件分配的内存,除非您调用GC.AddMemoryPressure告诉它有关分配的其他内存。

通过读取Process.WorkingSet64Process.VirtualMemory64Process类的其他此类属性,您可以更好地了解分配的实际内存量。 只需调用Process.GetCurrentProcess ,然后获取所需内容即可。

也就是说,使用性能计数器可能会更好。

这不是您问题的直接答案,但是您的意图是让您的服务保持数​​月运行24×7。

我会非常清楚堆碎片。 请参阅此文章以获得解释

使用性能计数器。 您可以将它们设置为登录到文件。

或者,您可以在代码中读取性能计数器,并将数据保存到中央位置。