| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2863 人关注过本帖
标题:在VS2005中怎样获取内存的使用率??
只看楼主 加入收藏
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
 问题点数:0 回复次数:16 
在VS2005中怎样获取内存的使用率??
各位高手,请问在VS2005的应用程序中怎样获取内存的使用率,具体代码应该怎样写,先谢谢了!
搜索更多相关主题的帖子: 内存 使用率 获取 应用程序 
2007-09-24 15:05
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
[DllImport("kernel32")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
用這個api就可以得到

すばらしいコードを書き出すのは楽しい事です
2007-09-24 15:29
pacocai
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1583
专家分:0
注 册:2007-3-12
收藏
得分:0 
目前我也只会用API……

浮生若梦天边月,醉死如酒水中星。红楼一梦千人叹,岂让万夫空做贱。博客:http://hi.baidu.com/rxvip
2007-09-24 16:22
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
貌似只能用api
System.Diagnostics.Process.GetProcesses(string machineName);
可以获得运行的进程。通过这些进程可以得到这些进程使用内存的和。
但是怎么得到内存的总量呢?如果有总量就能得到使用率了。

すばらしいコードを書き出すのは楽しい事です
2007-09-24 16:30
pacocai
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1583
专家分:0
注 册:2007-3-12
收藏
得分:0 
好像这个不能得到使用率,不过应该.net的库里应该有得到总量的东西,不过就不知道是什么东东了,现在对.net的库还是一知半解当中………

浮生若梦天边月,醉死如酒水中星。红楼一梦千人叹,岂让万夫空做贱。博客:http://hi.baidu.com/rxvip
2007-09-24 19:26
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
回复:(crazymk) [DllImport(

我在网上找了一段程序,就是用内核来实现的,但是那时在Web中用的,现在我想把其用到应用程序中,我真的不知道该怎么用,程序的源代码如下:
首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码:
CpuInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/

/// <summary>
/// 定义CPU的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct CpuInfo
{
/// <summary>
/// OEM ID
/// </summary>
public uint dwOemId;
/// <summary>
/// 页面大小
/// </summary>
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
/// <summary>
/// CPU个数
/// </summary>
public uint dwNumberOfProcessors;
/// <summary>
/// CPU类型
/// </summary>
public uint dwProcessorType;
public uint dwAllocationGranularity;
/// <summary>
/// CPU等级
/// </summary>
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}

MemoryInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/
/// <summary>
/// 定义内存的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct MemoryInfo
{
/// <summary>
///
/// </summary>
public uint dwLength;
/// <summary>
/// 已经使用的内存
/// </summary>
public uint dwMemoryLoad;
/// <summary>
/// 总物理内存大小
/// </summary>
public uint dwTotalPhys;
/// <summary>
/// 可用物理内存大小
/// </summary>
public uint dwAvailPhys;
/// <summary>
/// 交换文件总大小
/// </summary>
public uint dwTotalPageFile;
/// <summary>
/// 可用交换文件大小
/// </summary>
public uint dwAvailPageFile;
/// <summary>
/// 总虚拟内存大小
/// </summary>
public uint dwTotalVirtual;
/// <summary>
/// 可用虚拟内存大小
/// </summary>
public uint dwAvailVirtual;
}

SystemTimeInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/
/// <summary>
/// 定义系统时间的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct SystemTimeInfo
{
/// <summary>
/// 年
/// </summary>
public ushort wYear;
/// <summary>
/// 月
/// </summary>
public ushort wMonth;
/// <summary>
/// 星期
/// </summary>
public ushort wDayOfWeek;
/// <summary>
/// 天
/// </summary>
public ushort wDay;
/// <summary>
/// 小时
/// </summary>
public ushort wHour;
/// <summary>
/// 分钟
/// </summary>
public ushort wMinute;
/// <summary>
/// 秒
/// </summary>
public ushort wSecond;
/// <summary>
/// 毫秒
/// </summary>
public ushort wMilliseconds;
}

另外还定义了一个调用类SystemInfo.cs,代码如下:
using System;
using System.Configuration;
using System.Runtime.InteropServices;
using System.Management;
using System.Text;

/// <summary>
/// SystemInfo 的摘要说明
/// </summary>
public class SystemInfo
{
private const int CHAR_COUNT = 128;
public SystemInfo()
{

}
[DllImport("kernel32")]
private static extern void GetWindowsDirectory(StringBuilder WinDir, int count);

[DllImport("kernel32")]
private static extern void GetSystemDirectory(StringBuilder SysDir, int count);

[DllImport("kernel32")]
private static extern void GetSystemInfo(ref CpuInfo cpuInfo);

[DllImport("kernel32")]
private static extern void GlobalMemoryStatus(ref MemoryInfo memInfo);

[DllImport("kernel32")]
private static extern void GetSystemTime(ref SystemTimeInfo sysInfo);

/// <summary>
/// 查询CPU编号
/// </summary>
/// <returns></returns>
public string GetCpuId()
{
ManagementClass mClass = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mClass.GetInstances();
string cpuId=null;
foreach (ManagementObject mo in moc)
{
cpuId = mo.Properties["ProcessorId"].Value.ToString();
break;
}
return cpuId;
}

/// <summary>
/// 查询硬盘编号
/// </summary>
/// <returns></returns>
public string GetMainHardDiskId()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String hardDiskID=null;
foreach (ManagementObject mo in searcher.Get())
{
hardDiskID = mo["SerialNumber"].ToString().Trim();
break;
}
return hardDiskID;
}

/// <summary>
/// 获取Windows目录
/// </summary>
/// <returns></returns>
public string GetWinDirectory()
{
StringBuilder sBuilder = new StringBuilder(CHAR_COUNT);
GetWindowsDirectory(sBuilder, CHAR_COUNT);
return sBuilder.ToString();
}

/// <summary>
/// 获取系统目录
/// </summary>
/// <returns></returns>
public string GetSysDirectory()
{
StringBuilder sBuilder = new StringBuilder(CHAR_COUNT);
GetSystemDirectory(sBuilder, CHAR_COUNT);
return sBuilder.ToString();
}

/// <summary>
/// 获取CPU信息
/// </summary>
/// <returns></returns>
public CpuInfo GetCpuInfo()
{
CpuInfo cpuInfo = new CpuInfo();
GetSystemInfo(ref cpuInfo);
return cpuInfo;
}

/// <summary>
/// 获取系统内存信息
/// </summary>
/// <returns></returns>
public MemoryInfo GetMemoryInfo()
{
MemoryInfo memoryInfo = new MemoryInfo();
GlobalMemoryStatus(ref memoryInfo);
return memoryInfo;
}

/// <summary>
/// 获取系统时间信息
/// </summary>
/// <returns></returns>
public SystemTimeInfo GetSystemTimeInfo()
{
SystemTimeInfo systemTimeInfo = new SystemTimeInfo();
GetSystemTime(ref systemTimeInfo);
return systemTimeInfo;
}

/// <summary>
/// 获取系统名称
/// </summary>
/// <returns></returns>
public string GetOperationSystemInName()
{
OperatingSystem os = System.Environment.OSVersion;
string osName = "UNKNOWN";
switch (os.Platform)
{
case PlatformID.Win32Windows:
switch (os.Version.Minor)
{
case 0: osName = "Windows 95"; break;
case 10: osName = "Windows 98"; break;
case 90: osName = "Windows ME"; break;
}
break;
case PlatformID.Win32NT:
switch (os.Version.Major)
{
case 3: osName = "Windws NT 3.51"; break;
case 4: osName = "Windows NT 4"; break;
case 5: if (os.Version.Minor == 0)
{
osName = "Windows 2000";
}
else if (os.Version.Minor == 1)
{
osName = "Windows XP";
}
else if (os.Version.Minor == 2)
{
osName = "Windows Server 2003";
}
break;
case 6: osName = "Longhorn"; break;
}
break;
}
return String.Format("{0},{1}", osName, os.Version.ToString());
}
}

以下是调用实例,为了简单,我在一个aspx页面中输出,不过这个程序可以在WinForm中调用:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Specialized;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;

public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SystemInfo systemInfo = new SystemInfo();
Response.Write("操作系统:" + systemInfo.GetOperationSystemInName() + "<br>");
Response.Write("CPU编号:"+systemInfo.GetCpuId() + "<br>");
Response.Write("硬盘编号:"+systemInfo.GetMainHardDiskId() + "<br>");
Response.Write("Windows目录所在位置:" + systemInfo.GetSysDirectory() + "<br>");
Response.Write("系统目录所在位置:" + systemInfo.GetWinDirectory() + "<br>");
MemoryInfo memoryInfo = systemInfo.GetMemoryInfo();
CpuInfo cpuInfo = systemInfo.GetCpuInfo();
Response.Write("dwActiveProcessorMask" + cpuInfo.dwActiveProcessorMask + "<br>");
Response.Write("dwAllocationGranularity" + cpuInfo.dwAllocationGranularity + "<br>");
Response.Write("CPU个数:" + cpuInfo.dwNumberOfProcessors + "<br>");
Response.Write("OEM ID:" + cpuInfo.dwOemId + "<br>");
Response.Write("页面大小" + cpuInfo.dwPageSize + "<br>");
Response.Write("CPU等级" + cpuInfo.dwProcessorLevel + "<br>");
Response.Write("dwProcessorRevision" + cpuInfo.dwProcessorRevision + "<br>");
Response.Write("CPU类型" + cpuInfo.dwProcessorType + "<br>");
Response.Write("lpMaximumApplicationAddress" + cpuInfo.lpMaximumApplicationAddress + "<br>");
Response.Write("lpMinimumApplicationAddress" + cpuInfo.lpMinimumApplicationAddress + "<br>");
Response.Write("CPU类型:" + cpuInfo.dwProcessorType + "<br>");
Response.Write("可用交换文件大小:" + memoryInfo.dwAvailPageFile + "<br>");
Response.Write("可用物理内存大小:" + memoryInfo.dwAvailPhys + "<br>");
Response.Write("可用虚拟内存大小" + memoryInfo.dwAvailVirtual + "<br>");
Response.Write("操作系统位数:" + memoryInfo.dwLength + "<br>");
Response.Write("已经使用内存大小:" + memoryInfo.dwMemoryLoad + "<br>");
Response.Write("交换文件总大小:" + memoryInfo.dwTotalPageFile + "<br>");
Response.Write("总物理内存大小:" + memoryInfo.dwTotalPhys + "<br>");
Response.Write("总虚拟内存大小:" + memoryInfo.dwTotalVirtual + "<br>");
}
}
}


Face up to life with smiles no matter what happens
2007-09-25 10:22
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
从来没有做过应用程序,发现刚开始做起来真的很吃力……

Face up to life with smiles no matter what happens
2007-09-25 10:25
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
定義結構體,調用API就可以了丫。妳的問題是什麼呢

すばらしいコードを書き出すのは楽しい事です
2007-09-25 11:21
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
根据上面的我想要得到内存的利用率,我知道怎么算,但是由于内存的利用率是一个百分数,所以我不知道应该怎样转换,所以还请指教?

Face up to life with smiles no matter what happens
2007-09-25 13:01
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 

當前使用100M/總內存數1000M * 100 =10
使用率10% 妳問的應該不是這個意思吧


すばらしいコードを書き出すのは楽しい事です
2007-09-25 13:12
快速回复:在VS2005中怎样获取内存的使用率??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014247 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved