| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2865 人关注过本帖
标题:在VS2005中怎样获取内存的使用率??
取消只看楼主 加入收藏
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
 问题点数:0 回复次数:6 
在VS2005中怎样获取内存的使用率??
各位高手,请问在VS2005的应用程序中怎样获取内存的使用率,具体代码应该怎样写,先谢谢了!
搜索更多相关主题的帖子: 内存 使用率 获取 应用程序 
2007-09-24 15:05
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
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
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
因为上面定义的是无符号整形,现在我要把其值赋给一个label控件的text属性,而这个属性是string类型的,所以算出来总是0%,我的意思是怎样取小数点后面的两位数?并且赋给label.text。

Face up to life with smiles no matter what happens
2007-09-25 13:49
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
我试过了
这样不行
如果很容易的话我也不会问你们了

Face up to life with smiles no matter what happens
2007-09-25 14:34
tel1982
Rank: 3Rank: 3
来 自:水星
等 级:新手上路
威 望:8
帖 子:852
专家分:0
注 册:2006-10-21
收藏
得分:0 
谢谢各位,我已经解决了~~!

Face up to life with smiles no matter what happens
2007-09-26 18:15
快速回复:在VS2005中怎样获取内存的使用率??
数据加载中...
 
   



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

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