【问题标题】:System.Management resources monitor for statistics info such as I/O, CPU, Memory usage... etc'System.Management 资源监视统计信息,例如 I/O、CPU、内存使用...等
【发布时间】:2013-06-17 02:37:27
【问题描述】:

我正在尝试对本地数据库管理系统进行一些基准测试。 我需要想出一个图形用户界面来显示像

这样的信息
  • 每个核心的cpu使用率
  • 内存使用情况
  • 硬盘输入/输出
  • ..等

不使用 Vb.net,但如果需要我可以使用 p/invoke 或本机代码

以下代码是:据我所知

Set objCimv2 = GetObject("winmgmts:root\cimv2")
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")

' Add items to the SWbemRefresher
' Without the SWbemRefreshableItem.ObjectSet call,
' the script will fail
Set objMemory = objRefresher.AddEnum _
    (objCimv2, _ 
    "Win32_PerfFormattedData_PerfOS_Memory").ObjectSet
Set objDiskQueue = objRefresher.AddEnum _
    (objCimv2, _
    "Win32_PerfFormattedData_PerfDisk_LogicalDisk").ObjectSet
Set objQueueLength = objRefresher.AddEnum _
    (objCimv2, _
    "Win32_PerfFormattedData_PerfNet_ServerWorkQueues").ObjectSet

' Initial refresh needed to get baseline values
objRefresher.Refresh
intTotalHealth = 0
' Do three refreshes to get data
For i = 1 to 3
    WScript.Echo "Refresh " & i
    For each intAvailableBytes in objMemory
        WScript.Echo "Available megabytes of memory: " _
            & intAvailableBytes.AvailableMBytes
        If intAvailableBytes.AvailableMBytes < 4 Then
            intTotalHealth = intTotalHealth + 1
        End If
    Next
    For each intDiskQueue in objDiskQueue
        WScript.Echo "Current disk queue length " & "Name: " _
            & intDiskQueue.Name & ":" _
            & intDiskQueue.CurrentDiskQueueLength
        If intDiskQueue.CurrentDiskQueueLength > 2 Then
            intTotalHealth = intTotalHealth + 1
        End If
    Next
    For each intServerQueueLength in objQueueLength
        WScript.Echo "Server work queue length: " _
            & intServerQueueLength.QueueLength
        If intServerQueueLength.QueueLength > 4 Then
            intTotalHealth = intTotalHealth + 1                       
        End If
    Wscript.Echo "  "
    Next
    If intTotalHealth > 0 Then
        Wscript.Echo "Unhealthy."
    Else
        Wscript.Echo "Healthy."
    End If
    intTotalHealth = 0
    Wscript.Sleep 5000
' Refresh data for all objects in the collection
    objRefresher.Refresh
Next

我正在寻找一个不错的 API 来使用 C#、asp.net webforms、framework 4.0 - 4.02 访问实时硬件(当前版本是 windows 7 x64)信息和统计信息。 目前我所知道的只是如何操作和访问“进程”,而不是按照本文的要求进行绑定。

【问题讨论】:

    标签: c# asp.net ajax winapi wmi-query


    【解决方案1】:
    public class MyPerfoamnceCounter
    {
    
        public string pc()
        {
            Dictionary<string, List<PerformanceCounter>> counters =
    
        new Dictionary<string, List<PerformanceCounter>>();
            List<PerformanceCounter> cpuList = new List<PerformanceCounter>();
            List<PerformanceCounter> procList = new List<PerformanceCounter>();
            List<PerformanceCounter> memList = new List<PerformanceCounter>();
    
            PerformanceCounterCategory perfCat = new PerformanceCounterCategory();
        foreach (Process process in Process.GetProcesses()) 
        {
    
    
            PerformanceCounter procProcesTimeCounter  = new PerformanceCounter(
             "Process", 
            "% Processor Time", 
            process.ProcessName);
            var proc = procProcesTimeCounter; procList.Add(proc);
            procProcesTimeCounter.NextValue(); 
    
    
            PerformanceCounter procCPUTimeCounter = new PerformanceCounter(
             "Processor",
            "% Processor Time",
            process.ProcessName);
             //procCPUTimeCounter.CategoryName= "Processor";
             perfCat.CategoryName = procCPUTimeCounter.CategoryName;
             var ex = PerformanceCounterCategory.Exists("Processor");
    
             if (ex)
             {
                 cpuList.Add(procCPUTimeCounter);
                 //if(procCPUTimeCounter.InstanceName
                 //if(procCPUTimeCounter.InstanceName == process.ProcessName)
                 procCPUTimeCounter.NextValue();
             }
    
            PerformanceCounter procMemTimeCounter = new PerformanceCounter(
                 "Memory", "Available MBytes",
                process.ProcessName);
            ex = perfCat.InstanceExists(process.ProcessName);
    
    
            if (ex)
            {
                var mem = procMemTimeCounter; memList.Add(mem);
                procMemTimeCounter.NextValue();
            }
    
            /*
             var oktoplot = Convert.ToUInt32(v) != 0;
                if (oktoplot)
                    counters.Add(procProcesTimeCounter);
            */
        }
    
        counters.Add("CPUs", cpuList);
        counters.Add("PROCs", procList);
        counters.Add("MEMs", memList);
    
        System.Threading.Thread.Sleep(2250); // 1 second wait  ("Memory", "Available MBytes")
    
    
        StringBuilder SbRw = new StringBuilder();
        SbRw.Append("<table id = 'tblMainCounters'>");
        List<string> couterNames = new List<string>();
        foreach (string cName in counters.Keys)
        {
            couterNames.Add(cName);
        }
    
        foreach (string cNameStr in couterNames)
        {
    
            SbRw.Append("\r\n\t<tr>\r\n\t\t<td>\r\n\t\t\t<table id='tbl" + cNameStr + "'>\r\n\t\t\t\t");
            for (int i = 0; i < counters[cNameStr].Count; i++)
            {
                //string ToPRint = counters[cNameStr].ElementAt(i).NextValue().ToString();
                //bool OkToprint = string.IsNullOrEmpty(ToPRint) == false && ToPRint != (0.0).ToString() && ToPRint != (0).ToString();
                //if (OkToprint)
                SbRw.Append(string.Format("\r\n\t\t\t\t\t<tr id='{0}List{1}'>\r\n\t\t\t\t\t\t<td>Category : </td><td>{2}</td><td> Process : </td><td>{3}</td><td> CounterName : </td><td>{4}</td><td> CPU Usage : </td><td><b> {5}%</b></td>\r\n\t\t\t\t\t</tr>",
                cNameStr,
                i.ToString(),
                counters[cNameStr].ElementAt(i).CategoryName,
                counters[cNameStr].ElementAt(i).InstanceName,
                counters[cNameStr].ElementAt(i).CounterName,
                counters[cNameStr].ElementAt(i).NextValue()));
    
            }
            SbRw.Append("</table><!-- Closing table_" + cNameStr + " -->\r\n\t\t\t</td>\r\n\t\t</tr>");
        }
        SbRw.Append("</table><!-- Closing tableMainCounters --><br /><br />");
    
        return(SbRw.ToString()); 
    
    
    }
    

    JQuery Ajax 部分用于更新页面而不刷新我正在使用

    $('document').ready(function () {
        // alert("JeuryIsOnline");
        $('#DivRobCounterRes').fadeTo(4, 0);
    
        $('.Span_imgMemeBase').click(
            function () {
    
                var Spars = [];
                Spars.push("egnition");
    
                for (i = 1; i < 11; i++)
    
                jQuerySendCfrm(Spars);
         });
    
    
    });    // EndJquery Ready Code 
    
    
    
    function jQuerySendCfrm(resluts) {
    
        var SentClientinfo = []
        SentClientinfo.push({ key: "SentClientinfo", value: resluts });
        var CurrpageURL = "default.aspx/";
        var WebmethodName = "StartTest";
        var StageIdentifyer = "stage1";
        var Post_TargetUrl = CurrpageURL + WebmethodName;
    
        jQueryAajaxNoPostBack(Post_TargetUrl, SentClientinfo, StageIdentifyer);
    }
    
    
    function jQueryAajaxNoPostBack(targetUrl, passedSentPars, StageIdentifyer) {
    //////////    alert(JSON.stringify({ SentPars: passedSentPars }));
        $.ajax({
            type: 'POST',
            url: targetUrl,
            data: JSON.stringify({ SentPars: passedSentPars }),
    
            contentType: "application/json; charset=utf-8",
            dataType: "json",
    
            success: function (response) {
                if (StageIdentifyer == "stage1") {
                    var htmlret = response.d;
                    getCallBackToGenerateSeYaMsg(htmlret);
                }
    //            else if (StageIdentifyer == "stage2") {
    //                var html4TableHeaders = response.d;
    //                getCallBackToGenerateInnerHtmlDiv(html4TableHeaders);
    //                //alert(response.d)
    //            }
    
        },
        error: function (response) {
        ////////            alert(response.status + ' ' + response.statusText);
    
               }
        });
    }
    
    function getCallBackToGenerateSeYaMsg(html) {
    
                $('#DivRobCounterRes').fadeTo(400, 1);
                $('#DivRobCounterRes').append(html);
    }
    

    MSDN Using Process

    MSDN2

    stack overflow post链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多