内存计数器线程不工作
本文关键字:工作 线程 计数器 内存 | 更新日期: 2023-09-27 18:15:00
我实际上有一个进程,它在执行主任务之前调用另一个可执行文件(运行大约需要半个小时)。因此,客户不会开始认为程序已经挂起,并且出于调试目的,我已经包含了一个单独的线程,它应该每500ms更新这个单独进程的内存计数器。
由于某些原因,尽管可执行文件的内存使用在运行过程中持续增长(从100MiB到> 500MiB),但这似乎并没有更新。
我已经检查过了,循环肯定在运行,我只是不能让内存计数器更新(我也不能检查手表,因为我在这台机器上没有必要的。exe,也不能在目标机器上安装VS)。
以下是相关的代码部分,如有任何帮助,将不胜感激:
public static void Main()
{
try
{
Console.WindowWidth = 100;
}
catch
{
// ignored
}
ProcessStartInfo generateReport = new ProcessStartInfo
{
Arguments =
"/H /EH ReliabilityMontroseLOS /T D:''InformerReports''Archive''ReliabilityData''ICSSReport.csv",
CreateNoWindow = true,
FileName = @"C:'Invensys'Aim'AimInform'Inform.exe",
UseShellExecute = true
};
Thread thread = new Thread(() => StartReportThread(generateReport));
thread.Start();
int x = 35;
int direction = 1;
Console.ForegroundColor = ConsoleColor.Green;
while (thread.IsAlive)
{
string line = "";
for (int j = 0; j < x; j++)
{
line += " ";
}
line += "Collecting Data";
string line2 = string.Format("AIM*Inform Memory Usage: {0} MiB", workingSet / Math.Pow(1024,2));
Console.Clear();
Console.WriteLine(line);
Console.WriteLine(line2);
x += direction;
if ((x == 80) || (x == 0))
{
direction = -direction;
}
Thread.Sleep(500);
}
//Everything else
和
private static void StartReportThread(ProcessStartInfo generateReport)
{
Process proc = Process.Start(generateReport);
while ((proc != null) && !proc.HasExited)
{
workingSet = proc.WorkingSet64;
Thread.Sleep(100);
}
}
结果证明解决方案相当简单。System.Process
大量缓存其所有字段,因此我需要手动触发更新。下面的代码段现在是:
private static void StartReportThread(ProcessStartInfo generateReport)
{
Process proc = Process.Start(generateReport);
while ((proc != null) && !proc.HasExited)
{
proc.Refresh();
workingSet = proc.WorkingSet64;
Thread.Sleep(50);
}
}
效果很好!