最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用C#獲取windows系統(tǒng)資源使用情況

 更新時(shí)間:2025年07月21日 10:16:47   作者:大魚>  
這篇文章主要為大家詳細(xì)介紹了如何使用C#語(yǔ)言獲取windows系統(tǒng)資源使用情況,文中的示例代碼講解詳細(xì), 感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.前言

之前有一篇博客介紹如何獲取Linux服務(wù)器上的資源使用情況《Java 獲取服務(wù)器資源(內(nèi)存、負(fù)載、磁盤容量)》,這里介紹如何通過C#獲取Window系統(tǒng)的資源使用。

2.獲取服務(wù)器資源

2.1.內(nèi)存

[DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);

        //定義內(nèi)存的信息結(jié)構(gòu)
        [StructLayout(LayoutKind.Sequential)]
        private struct MEMORY_INFO {
            public uint DWLength;//當(dāng)前結(jié)構(gòu)體大小
            public uint DWMemoryLoad;//當(dāng)前內(nèi)存使用率
            public ulong ullTotalPhys;//總計(jì)物理內(nèi)存大小
            public ulong ullAvailPhys;//可用物理內(nèi)存代銷
            public ulong ullTotalPagefiles;//總計(jì)交換文件大小
            public ulong ullAvailPagefiles;//可用交換文件大小
            public ulong ullTotalVirtual;//總計(jì)虛擬內(nèi)存大小
            public ulong ullAvailVirtual;//可用虛擬內(nèi)存大小
            public ulong ullAvailExtendedVirtual; //保留 這個(gè)值始終為0
        }

        private static MEMORY_INFO GetMemoryInfo() {
            MEMORY_INFO memoryInfo = new MEMORY_INFO();
            memoryInfo.DWLength = (uint)System.Runtime.InteropServices.Marshal.SizeOf(memoryInfo);
            GlobalMemoryStatusEx(ref memoryInfo);
            return memoryInfo;
        }

        /// <summary>
        /// 獲取內(nèi)存信息
        /// </summary>
        /// <returns></returns>
        public static ServerMemory GetSysMemoryInfo()
        {
            try
            {
                MEMORY_INFO memoryInfo = GetMemoryInfo();
                ServerMemory serverMemory = new ServerMemory();
                serverMemory.serverId = serverId;
                serverMemory.serverName = serverName;
                serverMemory.memTotal = (uint)(memoryInfo.ullTotalPhys / 1024);
                serverMemory.memFree = (uint)(memoryInfo.ullTotalPagefiles / 1024);
                serverMemory.memAvailable = (uint)(memoryInfo.ullAvailPhys / 1024);
                serverMemory.active = (uint)(memoryInfo.ullAvailPhys/1024);
                long timestamp = CommonUtil.getNowDateTimestamp();
                serverMemory.dateTimestamp = timestamp;
                serverMemory.dateTime = CommonUtil.dateTime2Timestamp(timestamp);
                
                return serverMemory;
            }
            catch (Exception ex) {
                Log.Instance.Error("GetSysMemoryInfo:" + ex.Message);
                return null;
            }
        }

因?yàn)楂@取到的資源是以byte為單位,我這里將其轉(zhuǎn)成了KB,所以除以了1024.

ServerMemory實(shí)體類

public class ServerMemory
    {
        public string serverId { set; get; }
        public string serverName { set; get; }
        /// <summary>
        /// 內(nèi)存總量
        /// </summary>
        public uint memTotal { set; get; }
        /// <summary>
        /// 系統(tǒng)保留量
        /// </summary>
        public uint memFree { set; get; }
        /// <summary>
        /// 應(yīng)用程序可用量
        /// </summary>
        public uint memAvailable { set; get; }
        /// <summary>
        /// 可使用量
        /// </summary>
        public uint active { set; get; }
        public string dateTime { set; get; }
        public long dateTimestamp { set; get; }
    }

2.2.磁盤

public static ServerDisk GetUsedDisk() {
            try
            {
                List<Dictionary<string, string>> diskInfoList = new List<Dictionary<string, string>>();
                ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");
                ManagementObjectCollection disks = diskClass.GetInstances();
                foreach (ManagementObject disk in disks)
                {
                    Dictionary<string, string> diskInfoDic = new Dictionary<string, string>();
                    try
                    {
                        // 磁盤名稱
                        diskInfoDic["Name"] = disk["Name"].ToString();
                        // 磁盤描述
                        diskInfoDic["Description"] = disk["Description"].ToString();
                        // 磁盤總?cè)萘?,可用空間,已用空間
                        if (System.Convert.ToInt64(disk["Size"]) > 0)
                        {
                            long totalSpace = System.Convert.ToInt64(disk["Size"]) / 1024;
                            long freeSpace = System.Convert.ToInt64(disk["FreeSpace"]) / 1024;
                            long usedSpace = totalSpace - freeSpace;
                            diskInfoDic["totalSpace"] = totalSpace.ToString();
                            diskInfoDic["usedSpace"] = usedSpace.ToString();
                            diskInfoDic["freeSpace"] = freeSpace.ToString();
                        }
                        diskInfoList.Add(diskInfoDic);
                    }
                    catch (Exception ex)
                    {
                        Log.Instance.Error("ManagementObject->disk:" + ex.Message);
                    }
                }
                if (diskInfoList.Count > 0)
                {
                    ServerDisk serverDisk = new ServerDisk();
                    serverDisk.serverId = serverId;
                    serverDisk.serverName = serverName;
                    Dictionary<string, DiskInfo> diskMap = new Dictionary<string, DiskInfo>();
                    foreach (Dictionary<string, string> dic in diskInfoList)
                    {
                        if (dic.ContainsKey("totalSpace") && dic.ContainsKey("usedSpace") && dic.ContainsKey("freeSpace"))
                        {
                            DiskInfo diskInfo = new DiskInfo();
                            diskInfo.diskName = dic["Name"];
                            diskInfo.diskSize = double.Parse(dic["totalSpace"]);
                            diskInfo.used = double.Parse(dic["usedSpace"]);
                            diskInfo.avail = double.Parse(dic["freeSpace"]);
                            diskInfo.usageRate = (int)((diskInfo.used / diskInfo.diskSize) * 100);
                            diskMap.Add(diskInfo.diskName, diskInfo);
                        }
                    }
                    serverDisk.diskInfoMap = diskMap;
                    long timestamp = CommonUtil.getNowDateTimestamp();
                    serverDisk.dateTimestamp = timestamp;
                    serverDisk.dateTime = CommonUtil.dateTime2Timestamp(timestamp);
                    return serverDisk;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex) {
                Log.Instance.Error("GetUsedDisk:"+ex.Message);
                return null;
            }
        }

ServerDisk實(shí)體類

   public class ServerDisk
    {
        public string serverId { set; get; }
        public string serverName { set; get; }
        public Dictionary<string,DiskInfo> diskInfoMap { set; get; }
        public string dateTime { set; get; }
        public long dateTimestamp { set; get; }
    }

DiskInfo實(shí)體類

    public class DiskInfo
    {
        public string diskName { set; get; }
        public double diskSize { set; get; }
        public double used { set; get; }
        public double avail { set; get; }
        public int usageRate { set; get; }
    }

2.3.CPU

public static ServerCpu GetUsedCPU() {
            ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOs_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            List <string> list = new List <string> ();
            foreach (ManagementObject mo in moc) {
                if (mo["Name"].ToString() == "_Total") {
                    list.Add(mo["percentprocessorTime"].ToString());
                }
            }
            int percentage = list.Sum(s => int.Parse(s));
            ServerCpu serverCpu = new ServerCpu();
            serverCpu.serverId = serverId;
            serverCpu.serverName = serverName;
            serverCpu.percentage = percentage;
            long timestamp = CommonUtil.getNowDateTimestamp();
            serverCpu.dateTimestamp = timestamp;
            serverCpu.dateTime = CommonUtil.dateTime2Timestamp(timestamp);
            return serverCpu;
        }

ServerCpu實(shí)體類

 public class ServerCpu
    {
        public string serverId { set; get; }
        public string serverName { set; get; }
        public int percentage { set; get; }
        public string dateTime { set; get; }
        public long dateTimestamp { set; get; }
    }

3.最終效果

最終我想實(shí)現(xiàn)對(duì)Linux和Windows服務(wù)器的監(jiān)控,類似效果如下:

到此這篇關(guān)于如何使用C#獲取windows系統(tǒng)資源使用情況的文章就介紹到這了,更多相關(guān)C#獲取windows資源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#集合之隊(duì)列的用法

    C#集合之隊(duì)列的用法

    這篇文章介紹了C#集合之隊(duì)列的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#動(dòng)態(tài)對(duì)象(dynamic)詳解(實(shí)現(xiàn)方法和屬性的動(dòng)態(tài))

    C#動(dòng)態(tài)對(duì)象(dynamic)詳解(實(shí)現(xiàn)方法和屬性的動(dòng)態(tài))

    下面小編就為大家?guī)?lái)一篇C#動(dòng)態(tài)對(duì)象(dynamic)詳解(實(shí)現(xiàn)方法和屬性的動(dòng)態(tài))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-02-02
  • 從零開始教你利用C#輕松實(shí)現(xiàn)語(yǔ)音識(shí)別功能

    從零開始教你利用C#輕松實(shí)現(xiàn)語(yǔ)音識(shí)別功能

    本文以語(yǔ)音識(shí)別為例,看如何高效的將語(yǔ)音識(shí)別功能集成至C#系統(tǒng)中,后續(xù)大家可以繼續(xù)完善擴(kuò)展,去處理如語(yǔ)音指令、語(yǔ)音交互、字幕生成、會(huì)議紀(jì)要分析、語(yǔ)音翻譯等相關(guān)任務(wù)
    2025-12-12
  • 關(guān)于C#反射 你需要知道的

    關(guān)于C#反射 你需要知道的

    這篇文章主要介紹了C#反射的相關(guān)知識(shí),文中講解的非常詳細(xì),代碼幫助大家更好的參考學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • c# DevExpress gridcontrol日期行的顯示格式設(shè)置

    c# DevExpress gridcontrol日期行的顯示格式設(shè)置

    這篇文章主要介紹了c# DevExpress gridcontrol日期行的顯示格式設(shè)置,需要的朋友可以參考下
    2017-02-02
  • Chrome Visual Studio 2005下的編譯過程

    Chrome Visual Studio 2005下的編譯過程

    研究Chrome ,首先得把它編譯出來(lái),這對(duì)于后續(xù)的代碼分析和閱讀有很大的幫助,想想自己編譯出一個(gè) Chrome 瀏覽器來(lái)使用,那是一件很炫的事情。
    2009-07-07
  • C#.NET學(xué)習(xí)筆記5 C#中的條件編譯

    C#.NET學(xué)習(xí)筆記5 C#中的條件編譯

    條件編譯是C#比Java多出的東西,但我跟前輩請(qǐng)教后,他們都說(shuō)條件編譯在實(shí)際的項(xiàng)目開發(fā)中不怎么使用.鑒于是新內(nèi)容,我還是做做筆記,理解一下好了
    2012-11-11
  • C#開發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    C#開發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)微信門戶及應(yīng)用第二篇,微信文本消息和圖文消息的應(yīng)答,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#9新特性init only setter的使用

    C#9新特性init only setter的使用

    這篇文章主要介紹了C#9新特性init only setter的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#獲取屏幕分辨率縮放比例的方法與示例

    C#獲取屏幕分辨率縮放比例的方法與示例

    在C#中,獲取屏幕分辨率縮放比例通常指的是Dpi縮放比例,它表示顯示設(shè)備的獨(dú)立像素與設(shè)備無(wú)關(guān)像素(96 DPI)的比例,這通常用于確保應(yīng)用程序在不同分辨率和縮放設(shè)置的顯示設(shè)備上都能正確顯示,本文給大家介紹了C#獲取屏幕分辨率縮放比例的方法與示例,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

光泽县| 都兰县| 兴国县| 仙桃市| 太和县| 白银市| 吉水县| 静安区| 永安市| 东乡族自治县| 开化县| 卫辉市| 永兴县| 鄄城县| 荆州市| 汤阴县| 遂平县| 同心县| 大方县| 临桂县| 松滋市| 农安县| 北安市| 三河市| 惠安县| 富阳市| 阿拉尔市| 桦甸市| 景泰县| 石屏县| 东乡县| 高雄市| 金沙县| 兰西县| 盐池县| 登封市| 两当县| 上思县| 屯门区| 延吉市| 武胜县|