我正在创建一个基于C#的Windows服务,它将在几个月内全天候运行.我希望能够跟踪我的服务的一般内存使用情况.它不需要精确到字节.分配的一般金额就足够了.我将监视内存消耗的趋势.GC.GetTotalMemory()是否适合监控此方法?
我知道性能监视器和计数器的使用.但是,此服务将在至少12个不同的服务器上运行.我不想在12个不同的服务器上跟踪PM.该服务将从所有实例中将所有性能和内存使用信息保留到中央数据库,以避免这种情况,并便于分析.
GC.GetTotalMemory检索认为已分配的内存量。它只知道托管组件分配的内存,除非您调用GC.AddMemoryPressure它告诉它分配的其他内存。
您可以通过阅读获得分配的内存量实际的一个更好的想法Process.WorkingSet64,Process.VirtualMemory64和其他此类性质Process的类。只需致电Process.GetCurrentProcess,然后得到您需要的东西。
也就是说,您最好使用性能计数器。
只有它是一个纯粹的托管内存应用程序.如果其中任何一个调用非托管代码,那么在那里分配的内存将永远不会在垃圾收集器中注册(除非有人记得打电话GC.AddMemoryPressure).