C# 性能监视器-IO数据操作/秒
我试图从某个进程的性能监视器中获取一个值,并将其转换为可读值。C# 性能监视器-IO数据操作/秒,c#,performancecounter,C#,Performancecounter,我试图从某个进程的性能监视器中获取一个值,并将其转换为可读值。 private static IEnumerable<String> GetProcessStatistics(String[] processList) { Process[] process_List = Process.GetProcesses(); foreach (string process in processList) { foreach (Process p i
private static IEnumerable<String> GetProcessStatistics(String[] processList)
{
Process[] process_List = Process.GetProcesses();
foreach (string process in processList)
{
foreach (Process p in process_List)
{
if (process == p.ProcessName)
{
StringBuilder sb = new StringBuilder();
PerformanceCounter NETWORKperformanceCounter = new PerformanceCounter("Process", "IO Data Operations/sec", p.ProcessName);
NETWORKperformanceCounter.NextValue();
System.Threading.Thread.Sleep(1000);
double processNetworkdata = NETWORKperformanceCounter.RawValue;
sb.AppendLine("ID: " + p.Id.ToString());
sb.AppendLine("NAME: " + p.ProcessName);
sb.AppendLine(String.Format("NETWORK USAGE: {0}", processNetworkdata));
sb.AppendLine(String.Format("NETWORK USAGE: {0}", ConvertToReadableBandwidthSize(processNetworkdata)));
yield return sb.ToString();
}
}
}
}
更新
我发现对于较大的数字,任何应该在mbps
范围内的东西,例如1.2mpbs
,我认为它是不正确的,但是对于较小的数字或mbps范围内的任何东西,它似乎都是可以的
private static String ConvertToReadableBandwidthSize(Object size)
{
string[] ordinals = new string[] { "","K","M", "G", "T", "P", "E" };
long bandwidth = Convert.ToInt64(size);
decimal rate = (decimal)bandwidth;
int ordinal = 0;
while (rate > 1024)
{
rate /= 1024;
ordinal++;
}
return String.Format("{0} {1}bps", Math.Round(rate,2, MidpointRounding.AwayFromZero), ordinals[ordinal]);
}