C#實戰小技巧(十五):獲取計算機系統信息和性能信息

1.操作系統版本

		public string GetOSVersion()
        {
            string os = string.Empty;
            try
            {
                if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor == 1)
                {
                    os = "Windows 7";
                }
                else if (Environment.OSVersion.Version.CompareTo(new Version("10.0")) >= 0)
                {
                    os = "Windows 10";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1)
                {
                    os = "Windows XP";
                }
                else if (Environment.OSVersion.Version.CompareTo(new Version("6.2")) >= 0)
                {
                    if (Environment.OSVersion.Version.CompareTo(new Version("6.3")) >= 0)
                    {
                        os = "Windows 8.1";
                    }
                    else
                    {
                        os = "Windows 8";
                    }
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor == 0)
                {
                    os = "Windows Vista";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 2)
                {
                    os = "Windows 2003";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 0)
                {
                    os = "Windows 2000";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32Windows && Environment.OSVersion.Version.Minor == 10 && Environment.OSVersion.Version.Revision.ToString() == "2222A")
                {
                    os = "Windows 98 第二版";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32Windows && Environment.OSVersion.Version.Minor == 10 && Environment.OSVersion.Version.Revision.ToString() != "2222A")
                {
                    os = "Windows 98";
                }
                else if (Environment.OSVersion.Platform == PlatformID.Unix)
                {
                    os = "Unix";
                }
            }
            catch (Exception ex)
            {
                LOG.Error(new StringBuilder("獲取操作系統版本出錯:").Append(ex.Message).ToString());
            }

            return os;
        }

2.系統類型(32位 or 64位)

		public string GetSystemType()
        {
            if (Environment.Is64BitOperatingSystem)
            {
                return "64 位操作系統";
            }
            else
            {
                return "32 位操作系統";
            }
        }

3.內核數量

		public int GetCPUCount()
        {
            return Environment.ProcessorCount;
        }

4.處理器

		public string GetProcessorName()
        {
            //Win32_PhysicalMemory;Win32_Keyboard;Win32_ComputerSystem;Win32_OperatingSystem
            try
            {
                ManagementClass mos = new ManagementClass("Win32_Processor");
                foreach (ManagementObject mo in mos.GetInstances())
                {
                    if (mo["Name"] != null)
                    {
                        return mo["Name"].ToString();
                    }

                    //PropertyDataCollection pdc = mo.Properties;
                    //foreach (PropertyData pd in pdc)
                    //{
                    //    if ("Name" == pd.Name)
                    //    {
                    //        return pd.Value.ToString();
                    //    }
                    //}
                }
            }
            catch (Exception ex)
            {
                LOG.Error(new StringBuilder("獲取處理器名稱失敗:").Append(ex.Message).ToString());
            }
            
            return string.Empty;
        }

5.開機後運行時間

		public string GetRunningTime()
        {
            string result = string.Empty;
            try
            {
                int uptime = Environment.TickCount & Int32.MaxValue;
                TimeSpan ts = new TimeSpan(Convert.ToInt64(Convert.ToInt64(uptime) * 10000));
                result = new StringBuilder(ts.Days.ToString()).Append("天 ").Append(ts.Hours).Append(":").
                    Append(ts.Minutes).Append(":").Append(ts.Seconds).ToString();
            }
            catch (Exception ex)
            {
                LOG.Error(new StringBuilder("獲取開機時間失敗:").Append(ex.Message).ToString());
            }

            return result;
        }

6.CPU使用率

		public float GetUsageOfCPU()
        {
        	this.pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");
            this.pcCpuLoad.MachineName = ".";
            this.pcCpuLoad.NextValue();
 
            return this.pcCpuLoad.NextValue();
        }

7.物理內存

		public long GetPhysicalMemory()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if (mo["TotalPhysicalMemory"] != null)
                {
                    return long.Parse(mo["TotalPhysicalMemory"].ToString());
                }
            }
            
			return 0;
        }

8.可用內存

		public long GetAvailableMemory()
        {
            long availablebytes = 0;
            try
            {
                ManagementClass mos = new ManagementClass("Win32_OperatingSystem");
                foreach (ManagementObject mo in mos.GetInstances())
                {
                    if (mo["FreePhysicalMemory"] != null)
                    {
                        availablebytes = 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                LOG.Error(new StringBuilder("獲取可用內存失敗:").Append(ex.Message).ToString());
            }

            return availablebytes;
        }

9.進程數量、線程數量、句柄數量

		public void GetProcessCount(out int processCount, out int threadCount, out int handleCount) 
        {
            Process[] processes = Process.GetProcesses();
            processCount = processes.Count();
            foreach (Process pro in processes)
            {
                threadCount += pro.Threads.Count;
                handleCount += pro.HandleCount;
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章