ASP .NET c#远程检索总的非分页内存使用情况

时间:2009-05-31 13:36:35

标签: c# asp.net memory

我正在开发一个简单的ASP .NET健康检查程序,但我遇到了一些障碍。

1)我需要能够从远程机器(在同一网络上)获得完整的非分页内存使用量。我已经尝试过使用System.Diganostics.Process.NonpagedSystemMemorySize64但是我已经意识到内核的非分页用法将从该总数中丢失。以下是我正在做的事情的快速示例:

Process[] myprocess = Process.GetProcesses("computername");

foreach (Process p in myprocess)
{
nonpaged += p.NonpagedSystemMemorySize64;
}

2)我可以通过使用System.Diagnostics.PerformanceCounter在本地克服它,但是您只能在本地访问该类的API。还有其他课程可以满足我的需求吗?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我之前用于获取机器诊断的一个解决方案是使用DLLImport。

See P-Invoke

希望这有帮助

皮特

回答你的评论

使用DLL导入时,您必须自己声明函数包装器。在下面的代码中,您可以看到public static extern void,它告诉编译器它是对名为GlobalMemoryStatus的函数的外部调用,该函数位于DLLImported kernel32.dll中。 MemoryStatus结构是函数的输出参数,填充在kernel32 dll中,并返回完全填充。

将其复制到您的代码中并阅读他们应该帮助您理解的评论。

/// <summary>
        /// Populates a memory status struct with the machines current memory status.
        /// </summary>
        /// <param name="stat">The status struct to be populated.</param>
        [DllImport("kernel32.dll")]
        public static extern void GlobalMemoryStatus(out MemoryStatus stat);


        /// <summary>
        /// The memory status struct is populated by the GlobalMemoryStatus external dll call to Kernal32.dll.
        /// </summary>
        public struct MemoryStatus
        {
            public uint Length;
            public uint MemoryLoad;
            public uint TotalPhysical;
            public uint AvailablePhysical;
            public uint TotalPageFile;
            public uint AvailablePageFile;
            public uint TotalVirtual;
            public uint AvailableVirtual;
        } 

// copy the guts of this method and add it to your own method.
public void InspectMemoryStatus()
{

MemoryStatus status = new MemoryStatus();
            GlobalMemoryStatus(out status);

    Debug.WriteLine(status.TotalVirtual);
}

这应该允许您获取机器的内存诊断信息。