我正在开发一个简单的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。还有其他课程可以满足我的需求吗?
任何帮助都将不胜感激。
答案 0 :(得分:1)
我之前用于获取机器诊断的一个解决方案是使用DLLImport。
希望这有帮助
皮特
回答你的评论
使用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);
}
这应该允许您获取机器的内存诊断信息。