我的程序中有一个问题,它的功能是在屏幕上显示进程消耗多少ram时间并显示峰值内存使用率ram,这样我的问题是当我关闭进程时,程序停止显示最高记忆力。
这里是显示峰值ram的代码部分:
public string vmax()
{
System.Diagnostics.Process[] ieProcs = Process.GetProcessesByName(label92.Text);
double avvv = 0;
string abi = null;
try
{
if (ieProcs.Length > 0)
{
foreach (System.Diagnostics.Process p in ieProcs)
{
String physicalMem = p.PeakWorkingSet64.ToString();
abi = physicalMem;
}
}
avvv = double.Parse(abi);
avvv = avvv * 0.001 / 1024;
return avvv + " K";
}
catch
{
return "";
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label90.Text = vmax();
}
使用开放计算器的过程:
关闭计算器的过程:
即使我关闭了这个过程,他仍然想要显示在峰值时记录的最后一个值。
答案 0 :(得分:2)
您需要将vmax函数传入标签的当前文本值,并在活动进程之间不再列出该进程时将其返回
public string vmax(string prevValue)
{
try
{
System.Diagnostics.Process[] ieProcs = Process.GetProcessesByName(label92.Text);
if(ieProcs.Length == 0)
return prevValue;
...
}
catch
{
return prevValue;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label90.Text = vmax(label90.Text);
}
说我还应该说你的所有字符串转换都有点令人困惑。 PeakWorkingSet64返回一个long,不需要将它转换为字符串,然后执行相同字符串的解析来执行一些计算。只需在微积分中使用long变量,并在从vmax函数返回之前将结果转换为字符串