zoukankan      html  css  js  c++  java
  • C# 获取计算机CPU使用率/内存使用率/磁盘使用率

    CPU:

    void Main()
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor WHERE Name="_Total"");
        var cpuItem = searcher.Get().Cast<ManagementObject>().Select(item => new { PercentProcessorTime = item["PercentProcessorTime"] }).First();
        if (cpuItem != null && cpuItem.PercentProcessorTime != null)
            Debug.Print("CPU:" + cpuItem.PercentProcessorTime.ToString());
    }

    Disk:

    public static Dictionary<string,int> GetDisksUsedRate()
    {
        var result = new Dictionary<string,int>();
        var searcher = new ManagementObjectSearcher("Select Name,PercentDiskTime from Win32_PerfFormattedData_PerfDisk_PhysicalDisk WHERE Name != "_Total"");
        var diskItems = searcher.Get().Cast<ManagementObject>().ToList();
        foreach (var diskItem in diskItems)
            result.Add(diskItem["Name"].ToString(), Convert.ToInt32(diskItem["PercentDiskTime"]));
        return result;
    }

    Memory:

    #region 获取内存使用率
    
            #region 可用内存
    
            /// <summary>
            ///     获取可用内存
            /// </summary>
            internal static long? GetMemoryAvailable()
            {
                const int MbDiv = 1024 * 1024;
                long availablebytes = 0;
                var managementClassOs = new ManagementClass("Win32_OperatingSystem");
                foreach (var managementBaseObject in managementClassOs.GetInstances())
                    if (managementBaseObject["FreePhysicalMemory"] != null)
                        availablebytes = 1024 * long.Parse(managementBaseObject["FreePhysicalMemory"].ToString());
                return availablebytes / MbDiv;
            }
    
            #endregion
    
            internal static double? GetMemoryUsed()
            {
                float? PhysicalMemory = GetPhysicalMemory();
                float? MemoryAvailable = GetMemoryAvailable();
                double? MemoryUsed = (double?)(PhysicalMemory - MemoryAvailable);
                double currentMemoryUsed = (double)MemoryUsed ;
                return currentMemoryUsed ;
            }
    
            private static long? GetPhysicalMemory()
            {
                //获得物理内存
                const int MbDiv = 1024 * 1024;
                var managementClass = new ManagementClass("Win32_ComputerSystem");
                var managementObjectCollection = managementClass.GetInstances();
                foreach (var managementBaseObject in managementObjectCollection)
                    if (managementBaseObject["TotalPhysicalMemory"] != null)
                        return long.Parse(managementBaseObject["TotalPhysicalMemory"].ToString()) / MbDiv;
                return null;
            }
    
            public static double? GetMemoryUsedRate()
            {
                float? PhysicalMemory = GetPhysicalMemory();
                float? MemoryAvailable = GetMemoryAvailable();
                double? MemoryUsedRate =(double?)(PhysicalMemory - MemoryAvailable)/ PhysicalMemory;
                return MemoryUsedRate.HasValue ? Convert.ToDouble(MemoryUsedRate * 100) : 0;
            }
    
            #endregion
  • 相关阅读:
    CTO干点啥?
    [转] 持续集成与持续交付备忘录
    [转]概率基础和R语言
    程序自信
    [转]Neural Networks, Manifolds, and Topology
    ubuntu14 + nginx + php
    [转]http://makefiletutorial.com/
    REDIS key notification
    GO RPC
    xpcall 安全调用
  • 原文地址:https://www.cnblogs.com/nanfei/p/13162166.html
Copyright © 2011-2022 走看看