3

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

  • 每个核心的cpu使用率
  • 内存使用情况
  • 硬盘输入/输出
  • ..ETC

它将使用 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)信息和统计数据。目前我所知道的只是如何操作和访问“进程”,但不按照本文的要求进行绑定。

4

1 回答 1

2
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 使用流程

MSDN2

堆栈溢出帖子链接

于 2013-06-19T11:11:14.887 回答