Code Bye

系统IO使用率

有没有朋友研究过  在window平台下 系统IO使用率的获取方式
如:任务管理器下就有IO使用率跟踪
解决方案

5

windows平台下有一堆标准的计数器,这是很标准的东西。

35

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ScanToolServiceShell
{
    public class SystemInfo
    {
        private PerformanceCounter m_cpu;       //CPU计数器
        private PerformanceCounter m_disk;      //CPU计数器
        private List<PerformanceCounter> m_sent = new List<PerformanceCounter>();
        private List<PerformanceCounter> m_recv = new List<PerformanceCounter>();
        private long _PhysicalMemory = 0;       //物理内存
        public long PhysicalMemory {
            get {
                return _PhysicalMemory;
            }
        }
        public int ProcessorCount {
            get {
                return Environment.ProcessorCount;
            }
        }
        public SystemInfo() {
            //cpu查询
            m_cpu = new PerformanceCounter("Processor", "% Idle Time", "_Total");
            m_cpu.MachineName = ".";
            m_cpu.NextValue();
            //磁盘查询
            m_disk = new PerformanceCounter("PhysicalDisk", "% Idle Time", "_Total");
            m_disk.MachineName = ".";
            m_disk.NextValue();
            //获得物理内存
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc) {
                if (mo["TotalPhysicalMemory"] != null) {
                    this._PhysicalMemory += long.Parse(mo["TotalPhysicalMemory"].ToString());
                }
            }
            //获取网卡
            foreach (var v in new PerformanceCounterCategory("Network Interface").GetInstanceNames()) {
                m_sent.Add(new PerformanceCounter("Network Interface", "Bytes Sent/sec", v));
                m_recv.Add(new PerformanceCounter("Network Interface", "Bytes Received/sec", v));
            }
        }
        /// <summary>
        /// cpu 使用率
        /// </summary>
        /// <returns></returns>
        public float GetCpuUsage() {
            float f = 100 - m_cpu.NextValue();
            if (f < 0) return 0;
            if (f > 100) return 100;
            return f;
        }
        public float GetMemoryUsage() {
            return (1 - (float)this.GetMemoryAvailable() / this.PhysicalMemory) * 100;
        }
        public long GetMemoryAvailable() {
            long lSize = 0;
            ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
            foreach (ManagementObject m in mc.GetInstances()) {
                if (m["FreePhysicalMemory"] != null) {
                    lSize = 1024 * long.Parse(m["FreePhysicalMemory"].ToString());
                }
            }
            return lSize;
        }
        /// <summary>
        /// 磁盘使用率
        /// </summary>
        /// <returns></returns>
        public float GetDiskTime() {
            float f = 100 - m_disk.NextValue();
            if (f < 0) return 0;
            if (f > 100) return 100;
            return f;
        }
        //上传速度
        public float GetSendBytes() {
            float f = 0;
            foreach (var v in m_sent) f += v.NextValue();
            return f;
        }
        //下载速度
        public float GetRecvBytes() {
            float f = 0;
            foreach (var v in m_recv) f += v.NextValue();
            return f;
        }
    }
}


下面那一排 本人就是用的上面的代码统计的 也和系统没差多少


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明系统IO使用率