asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)

代码如下:

using System;
using System.Data;
using System.Configuration;
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 Microsoft.Win32;
using System.Text;
using System.Runtime.InteropServices;
using System.Management;//(添加对 System.Management.dll 的引用才能使用 System.Management 命名空间)
namespace EC
{
/// <summary>
/// 收集机器硬件信息的相关代码片断(cpu频率、磁盘可用空间、内存容量……)
/// </summary>
public class CpuInfoObject
{
public CpuInfoObject()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 获取CPU频率
/**************************************************
* 函数名称:GetCPUFrequency()
* 功能说明:获取CPU频率
* 参 数:
* 使用示列:
* Response.Write(EC.CpuInfoObject.GetCPUFrequency());
************************************************/
/// <summary>
/// 获取CPU频率
/// </summary>
/// <returns>整型cpu频率</returns>
public static int GetCPUFrequency()
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0");
object obj = rk.GetValue("~MHz");
int CPUFrequency = (int)obj;
return CPUFrequency;
}
#endregion
#region 获取CPU名称
/**************************************************
* 函数名称:GetCPUName()
* 功能说明:获取CPU名称
* 参 数:
* 使用示列:
* Response.Write(EC.CpuInfoObject.GetCPUName());
************************************************/
/// <summary>
/// 获取CPU名称
/// </summary>
/// <returns>字符串型cpu名称</returns>
public static string GetCPUName()
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0");
object obj = rk.GetValue("ProcessorNameString");
string CPUName = (string)obj;
return CPUName.TrimStart();
}
#endregion
#region 磁盘空间
/**************************************************
* 函数名称:GetFreeDiskSpace(string DiskName)
* 功能说明:获取磁盘空间
* 参 数:DiskName:磁盘名称 D:或E:
* 使用示列:
* Response.Write(EC.CpuInfoObject.GetFreeDiskSpace("D:"));
************************************************/
/// <summary>
/// 磁盘空间
/// </summary>
/// <param name="DiskName">硬盘名称:D:或E:</param>
/// <returns>整型</returns>
public static long GetFreeDiskSpace(string DiskName)
{
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + DiskName + "\"");
disk.Get();
string totalByte = disk["FreeSpace"].ToString();
long freeDiskSpaceMb = Convert.ToInt64(totalByte) / 1024 / 1024;
return freeDiskSpaceMb;
}
#endregion
#region 获取操作系统版本
/**************************************************
* 函数名称:GetOSName()
* 功能说明:获取获取操作系统版本名称
* 参 数:
* 使用示列:
* Response.Write(EC.CpuInfoObject.GetOSName());
************************************************/
/// <summary>
/// 获取操作系统版本
/// </summary>
/// <returns>操作系统版本</returns>
public static string GetOSName()
{
string Rev = "";
System.OperatingSystem osInfo = System.Environment.OSVersion;
switch(osInfo.Platform)
{
//Platform is Windows 95, Windows 98,Windows 98 Second Edition, or Windows Me.
case System.PlatformID.Win32Windows:
switch(osInfo.Version.Major)
{
case 0:
Rev ="Windows 95";
break;
case 10:
if(osInfo.Version.Revision.ToString()=="2222A")
Rev ="Windows 98 Second Edition";
else
Rev ="Windows 98";
break;
case 90:
Rev="Windows Me";
break;
}
break;
//Platform is Windows NT 3.51, Windows NT 4.0, Windows 2000,or Windows XP.
case System.PlatformID.Win32NT:
switch (osInfo.Version.Major)
{
case 3:
Rev = "Windows NT 3.51";
break;
case 4:
Rev = "Windows NT 4.0";
break;
case 5:
if (osInfo.Version.Minor == 0)
Rev = "Windows 2000";
else if (osInfo.Version.Minor == 2)
Rev = "Windows 2003";
else
Rev = "Windows XP";
break;
}
break;
}
return Rev;
}
#endregion
}
}

(0)

相关推荐

  • 使用C#调用系统API实现内存注入的代码

    复制代码 代码如下: //首先导入命名空间 using System.Runtime.InteropServices; /// <summary> /// 在指定进程的虚拟地址空间中保留或开辟一段区域..除非MEM_RESET被使用,否则将该内存区域初始化为0. /// </summary> /// <param name="process">需要在其中分配空间的进程的句柄.这个句柄必须拥有PROCESS_VM_OPERATION访问权限</p

  • asp.net中C#实现手动回收内存的方法

    C#有自动回收内存的机制,但是有时自动回收有一定滞后,需要在变量使用后迅速回收,节约内存,这里介绍一个最简单的方法. 1.先对对象赋值 null; 2.使用System.GC.Collect() 复制代码 代码如下: class Program {          static void Main(string[] args)          {              long lenth = 1024 * 1024 * 128;                GetCost("程序启动

  • C#之CLR内存原理初探

    本文初步讲述了C#的CLR内存原理.这里所关注的内存里面说没有寄存器的,所以我们关注的只有托管堆(heap),栈(stack), 字符串常量池(其中string是一个很特殊的对象) 首先我们看两个方法: void M1() { string name = "Tom"; M2(name); } void M2(string name2) { int length = 10; double rate = 10.0; name2 = "Joe"; return; } 这里

  • 浅谈C#互操作的内存溢出问题

    c#调用C++DLL代码,发现了一个隐藏很深的问题. 危害很大,而且不易察觉. 大概是申明c++的函数时候,有一个long类型的指针.在C#中我的申明成了这样: public extern void Method(ref uint para); 最初怎么也没有发现这里面有什么问题,知道这个隐藏的问题暴露出来,把前面申明的一个变量改变了, 我才恍然大悟. 复制代码 代码如下: uint test = 0;int *p = new IntPtr();Method(ref test); 在调用Meth

  • 深入C# 内存管理以及优化的方法详解

    在C# winform应用程序中,用以下代码可以进行一些内存使用的优化 复制代码 代码如下: using System;using System.Diagnostics;using System.Runtime.InteropServices;/// <summary>/// 包含各种内存管理.优化的方法/// </summary>    public class Memory    {        private static readonly Version myVersio

  • C# Struct的内存布局问题解答

    问题:请说出以下struct的实例大小以及内存布局 复制代码 代码如下: struct Struct1{    public byte a;    public short b;    public string c;    public int d;} struct Struct2{    public byte a;    public long b;    public byte c;    public string d;} struct Struct3{    byte a;    b

  • C#字符串内存分配与驻留池学习分享

    刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例.如下: 复制代码 代码如下: String s1 ="Hello";String s2 ="Hello";                       //s2和s1的实际值都是Hellobool same = (object) s1 == (object) s2;//这里比较s1.s2是否引用了同一个对象实例//所

  • C#之CLR内存深入分析

    本文不再对值类型进行讨论,主要讨论一下引用类型.如要看内存值类型的朋友可以看一下前一篇C#之CLR内存原理初探. C#引用类型具体分析如下: 先来装备两个类: internal class Employee { public static Employee LookUp(string name) { return null; } public virtual string GetProgressReport() { return string.Empty; } } internal class

  • asp.net动态产生checkbox(数据源为DB或内存集合)

    之前在网上看了很多,其实有一些也是大同小异,本人在此小编一下大致解决方案摒弃微软提供的CheckBoxList 需求: 1动态产生一组checkbox(数据源为DB或内存集合) 2post提交时后台能及时获取 3提交后刷新页面checkbox保持原先选中或取消选中状态 4避免产生大量的viewstate 方案:使用repeater+input(checkbox)+input(hidden) html代码 复制代码 代码如下: <asp:Repeater runat="server"

  • C#的内存回收代码

    本文实例讲述了C#的内存回收方法.分享给大家供大家参考.具体实现方法如下: 如下示例代码是调用win32底层操作,可实现内存的回收. 复制代码 代码如下: [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSi

  • C#之CLR内存字符串常量池(string)

    C#中的string是比特殊的类,说引用类型,但不存在堆里面,而且String str=new String("HelloWorld")这样的重装也说没有的. 我们先来看一个方法: class Program { static void Main(string[] args) { String s = "HelloWorld"; Console.WriteLine(s); } } 然后我们用ildasm.exe工具把它生成IL语言来看一看它里面是怎么玩的: .met

随机推荐