系统.管理资源监视器的统计信息,如I/O, CPU,内存使用…等# 39;

本文关键字:内存 CPU 监视器 资源 管理 统计 信息 系统 | 更新日期: 2023-09-27 18:18:35

我正在尝试对本地数据库管理系统进行一些基准测试。我需要一个GUI来显示像

这样的信息
  • 各核心cpu占用率
  • 内存使用
  • 硬盘I/O
  • . .等

它将是没有使用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来访问实时硬件(当前版本是windows 7 x64)的信息和统计使用c#, asp.net webforms,框架4.0 - 4.02。现在我所知道的是如何操纵和访问"进程",但不绑定在这篇文章中所要求的。

系统.管理资源监视器的统计信息,如I/O, CPU,内存使用…等# 39;

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