首页 新闻 赞助 找找看

如何获得程序占用内存的准确大小

0
悬赏园豆:50 [已关闭问题]

做一个算法,计算N个指标中最相关的K个,也就是TOPK问题,需要分析各种算法的性能,其中之一是内存占用量,在Dotnet中,如何获取准确的值呢?

sherwinzhu的主页 sherwinzhu | 初学一级 | 园豆:110
提问于:2008-12-28 07:22
< >
分享
其他回答(1)
0

.net要实现这些东西一般也是通过平台调用实现了,api调用:

1.使用win32:

[DllImport("kernel32")]    
            
public  static  extern  void  GetSystemDirectory(StringBuilder  
            SysDir,
int  count);  
            [DllImport(
"kernel32")]    
            
public  static  extern  void  GetSystemInfo(ref  CPU_INFO  cpuinfo); 
               
            [DllImport(
"kernel32")]    
            
public  static  extern  void  GlobalMemoryStatus(ref  MEMORY_INFO  
            meminfo);    
            [DllImport(
"kernel32")]    
            
public  static  extern  void  GetSystemTime(ref  SYSTEMTIME_INFO  
            stinfo); 

http://www.cnblogs.com/wlq2000/archive/2006/04/13/374247.html

2.使用性能计数器

你可以搜一下,很多

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-28 08:19
0

不用调用API,.NET已经封装好了,用下面这个就OK了,

((Environment.WorkingSet / 0x100000L)).ToString() ;//MB

下面的方法是获取系统的物理内存大小:

public static string GetPhisicalMemory()
  {
  ManagementObjectSearcher searcher = new ManagementObjectSearcher();
  searcher.Query = new SelectQuery("Win32_PhysicalMemory", "", new string[] { "Capacity" });
  ManagementObjectCollection.ManagementObjectEnumerator enumerator = searcher.Get().GetEnumerator();
  double num = 0;
  while (enumerator.MoveNext())
  {
  ManagementBaseObject current = enumerator.Current;
  if (current.Properties["Capacity"].Value != null)
  {
  try
  {
  num += double.Parse(current.Properties["Capacity"].Value.ToString());
  }
  catch
  {
  return "δ֪";
  }
  }
  }
  num /= 0x100000;
  num = Math.Abs(num / 1024);
  return string.Format("{0}GB", num);
  }

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-12-28 23:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册