系统.管理资源监视器的统计信息,如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。现在我所知道的是如何操纵和访问"进程",但不绑定在这篇文章中所要求的。
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