ASP.NET c#远程检索未分页内存的总使用量
我正在开发一个简单的ASP.NET健康检查器,但遇到了一些障碍 1) 我需要能够从远程机器(在同一网络上)获取完整的非分页内存使用情况。我尝试过使用System.Diganostics.Process.NonpagedSystemMemorySize64,但是我逐渐意识到内核的非页面使用将从总数中消失。下面是我所做工作的一个快速示例:ASP.NET c#远程检索未分页内存的总使用量,c#,asp.net,memory,C#,Asp.net,Memory,我正在开发一个简单的ASP.NET健康检查器,但遇到了一些障碍 1) 我需要能够从远程机器(在同一网络上)获取完整的非分页内存使用情况。我尝试过使用System.Diganostics.Process.NonpagedSystemMemorySize64,但是我逐渐意识到内核的非页面使用将从总数中消失。下面是我所做工作的一个快速示例: Process[] myprocess = Process.GetProcesses("computername"); foreach (Process p i
Process[] myprocess = Process.GetProcesses("computername");
foreach (Process p in myprocess)
{
nonpaged += p.NonpagedSystemMemorySize64;
}
2) 我可以通过使用System.Diagnostics.PerformanceCounter在本地解决这个问题,但是您只能在本地访问该类的API。还有适合我需要的课程吗
任何帮助都将不胜感激。我以前用于获取机器诊断的一个解决方案是使用DLLImport 希望这有帮助 皮特 回应你的评论 使用DLL导入时,您必须自己声明函数包装器。在下面的代码中,您可以看到publicstaticexternvoid,它告诉编译器这是对位于DLLImported kernel32.dll中名为GlobalMemoryStatus的函数的外部调用。MemoryStatus结构是函数的一个输出参数,它在内核32 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);
}
//
///用当前内存状态填充内存状态结构。
///
///要填充的状态结构。
[DllImport(“kernel32.dll”)]
公共静态外部无效GlobalMemoryStatus(out MemoryStatus stat);
///
///内存状态结构由对Kernal32.dll的GlobalMemoryStatus外部dll调用填充。
///
公共结构MemoryStatus
{
公共单位长度;
公共uint MemoryLoad;
公共部门和实体部门;
公共单元可用物理;
公共uint总页面文件;
公共uint可用的页面文件;
公共信息网络;
公共uint可用虚拟设备;
}
//复制此方法的核心,并将其添加到您自己的方法中。
公共系统状态()
{
MemoryStatus status=新的MemoryStatus();
GlobalMemoryStatus(输出状态);
Debug.WriteLine(status.TotalVirtual);
}
这将允许您获取机器的内存诊断。我以前用于获取机器诊断的一个解决方案是使用DLLImport 希望这有帮助 皮特 回应你的评论 使用DLL导入时,您必须自己声明函数包装器。在下面的代码中,您可以看到publicstaticexternvoid,它告诉编译器这是对位于DLLImported kernel32.dll中名为GlobalMemoryStatus的函数的外部调用。MemoryStatus结构是函数的一个输出参数,它在内核32 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);
}
//
///用当前内存状态填充内存状态结构。
///
///要填充的状态结构。
[DllImport(“kernel32.dll”)]
公共静态外部无效GlobalMemoryStatus(out MemoryStatus stat);
///
///内存状态结构由对Kernal32.dll的GlobalMemoryStatus外部dll调用填充。
///
公共结构MemoryStatus
{
公共单位长度;
公共uint MemoryLoad;
公共部门和实体部门;
公共单元可用物理;
公共uint总页面文件;
公共uint可用的页面文件;
公共信息网络;
公共uint可用虚拟设备;
}
//复制此方法的核心,并将其添加到您自己的方法中。
公共系统状态()
{
MemoryStatus status=新的MemoryStatus();
GlobalMemoryStatus(输出状态);
Debug.WriteLine(status.TotalVirtual);
}
这将允许您获得机器的内存诊断。谢谢Pete,但是,对于非分页使用或总内核和/或内核分页使用,没有GlobalMemoryStatus或GlobalMemoryStatusex属性,除非我遗漏了什么。正如您在上面看到的,MemoryStatus结构包含内存和页面文件以及虚拟内存使用等的所有信息。谢谢Pete,但是,对于非分页使用或总内核和/或内核分页使用,没有GlobalMemoryStatus或GlobalMemoryStatusex属性,除非我遗漏了一些内容。正如您在上面看到的,MemoryStatus结构包含内存和页面文件以及虚拟内存使用等的所有信息。