1

私は次のプロセスを持っています:

public void Run()
        {

            ProcessStartInfo serverPInfo = new ProcessStartInfo("javaw", "-jar -Xms1024M -Xmx1024M \"C:\\Users\\David\\Documents\\Visual Studio 2012\\Projects\\ConsoleApplication8\\Debug\\craftbukkit.jar\" -o true -nojline");
            serverPInfo.RedirectStandardInput = true;
            serverPInfo.RedirectStandardOutput = true;
            serverPInfo.RedirectStandardError = true;
            serverPInfo.UseShellExecute = false;


            serverP = new Process();
            serverP.StartInfo = serverPInfo;

            serverP.OutputDataReceived += new DataReceivedEventHandler(ServerOutputDataReceived);
            serverP.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorDataReceived);
            serverP.Start();


            serverP.BeginOutputReadLine();
            serverP.BeginErrorReadLine();
            serverP.WaitForExit();
        }

プロセスの CPU と RAM の使用量を測定するにはどうすればよいですか?

serverP.WorkingSet64serverP.PrivateMemorySize64およびを試しserverP.PagedMemorySize64ましたが、すべて定数値を返します。それらのどれも変更されません (タスク マネージャーの RAM 使用量メーターなど)。

現在の CPU 使用率を取得する方法がわかりません。

インターネットで調べましたが、見つけたもののほとんどはPerformanceMonitor. 「javaw」プロセスのインスタンスがさらに存在する可能性があるため、これを使用したくありません。上記のコードで作成した子プロセスの CPU と RAM の使用量を測定したいだけです。

どんな助けでも大歓迎です。

4

2 に答える 2

0

「現在のCPU使用率」というものはありません。たとえば、最後の 1 秒など、ある期間に対してのみ測定できます。TotalProcessorTime プロパティを使用して、毎秒測定し、前の値を差し引くことができます。これにより、最後の測定期間に CPU が使用された時間がわかります。
RAM 使用量を測定するために、私は WorkingSet64 と PrivateMemorySize64 を使用しています - これは私にとってはうまくいきます。

于 2013-03-17T03:11:31.903 に答える
0

PerformanceCounter子プロセス アクティビティのみを測定するために使用できます。ただし、プロセス名の代わりにそのプロセス ID を使用する必要があります。カウンターを作成すると、カウンターRawValueは に等しくなりProcessIdます。

これは、そのような手法を説明する回答です。

于 2013-03-16T22:17:14.367 に答える