求教:获取当前程序“内存使用”和“虚拟内存大小”

gijquery4 2013-05-05 02:46:58
在下新人,求教各位,谢谢:)

Windows任务管理中的“内存使用”和“虚拟内存大小”应该用Process类的什么属性来获取呀?
Process类关于内存相关的属性有好几个,用C#去获取怎么都和任务管理器上的数值不一样(已经将字节转换了)


还请各位帮忙解决,谢谢



...全文
362 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oYanSiDeYu123456 2013-05-07
  • 打赏
  • 举报
回复
/// <summary> 2 /// 内存 3 /// </summary> 4 public class VAV_MDDFM_MEM 5 { 6 //定义内存的信息结构 7 [StructLayout(LayoutKind.Sequential)] 8 public struct MEMORY_INFO 9 { 10 public uint dwLength; 11 public uint dwMemoryLoad; 12 public uint dwTotalPhys; 13 public uint dwAvailPhys; 14 public uint dwTotalPageFile; 15 public uint dwAvailPageFile; 16 public uint dwTotalVirtual; 17 public uint dwAvailVirtual; 18 } 19 [DllImport("kernel32")] 20 private static extern void GetWindowsDirectory(StringBuilder WinDir, int count); 21 [DllImport("kernel32")] 22 private static extern void GetSystemDirectory(StringBuilder SysDir, int count); 23 [DllImport("kernel32")] 24 private static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo); 25 26 /// <summary> 27 /// 打印内存信息 28 /// </summary> 29 public static void PrintMemInfo() 30 { 31 Console.WriteLine(GetMemInfo()); 32 } 33 34 /// <summary> 35 /// 获取内存信息 36 /// </summary> 37 /// <returns></returns> 38 public static string GetMemInfo() 39 { 40 //调用GlobalMemoryStatus函数获取内存的相关信息 41 MEMORY_INFO MemInfo = new MEMORY_INFO(); 42 GlobalMemoryStatus(ref MemInfo); 43 44 StringBuilder sb = new StringBuilder(); 45 46 //*%的内存正在使用 47 sb.Append(MemInfo.dwMemoryLoad.ToString() + "% of the memory is being used " + "\r\n"); 48 //总共的物理内存 49 sb.Append("Physical memory total :" + Utility.ConvertBytes(MemInfo.dwTotalPhys.ToString(), 3) + "GB" + "\r\n"); 50 //可使用的物理内存 51 sb.Append("Use of physical memory :" + Utility.ConvertBytes(MemInfo.dwAvailPhys.ToString(), 3) + "GB" + "\r\n"); 52 //交换文件总大小 53 sb.Append("Total size of the swap file" + Utility.ConvertBytes(MemInfo.dwTotalPageFile.ToString(), 3) + "GB" + "\r\n"); 54 //尚可交换文件大小为 55 sb.Append(" Can still swap file size :" + Utility.ConvertBytes(MemInfo.dwAvailPageFile.ToString(), 3) + "GB" + "\r\n"); 56 //总虚拟内存 57 sb.Append("The Total virtual memory :" + Utility.ConvertBytes(MemInfo.dwTotalVirtual.ToString(), 3) + "GB" + "\r\n"); 58 //未用虚拟内存有 59 sb.Append("Unused virtual memory :" + Utility.ConvertBytes(MemInfo.dwAvailVirtual.ToString(), 3) + "GB" + "\r\n"); 60 // ConvertBytes(totMem, 3) + " GB" 61 return sb.ToString(); 62 } 63 } 1 public class Utility 2 { 3 public static decimal ConvertBytes(string b, int iteration) 4 { 5 long iter = 1; 6 for (int i = 0; i < iteration; i++) 7 iter *= 1024; 8 return Math.Round((Convert.ToDecimal(b)) / Convert.ToDecimal(iter), 2, MidpointRounding.AwayFromZero); 9 } 10 }
gijquery4 2013-05-06
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
哦,这不是“当前程序的”。你用.net看到的进程数据差多少?
没有什么规律
gijquery4 2013-05-05
  • 打赏
  • 举报
回复
求帮助哦~~~~!
  • 打赏
  • 举报
回复
哦,这不是“当前程序的”。你用.net看到的进程数据差多少?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧