2016-03-30 6 views
1

私はC#で別のプロセスのメモリを監視しようとしています。 ただし、Process.WorkingSet64またはProcess.PrivateMemorySize64が出力するメモリの最大値は4294967295です。パフォーマンスカウンタでも同じ問題が発生しています。Process.WorkingSet64は最大値4294967295を返します。

は、ここに私のコードです:

using System; 
using System.Diagnostics; 

namespace perfmon 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int pid; 
      if (int.TryParse(args[0], out pid)) 
      { 
       var p = Process.GetProcessById(pid); 

       var ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName); 
       Console.WriteLine($"ProcessName:{p.ProcessName}"); 

       var ram = ramCounter.NextValue(); 
       p.Refresh(); 

       Console.WriteLine("WorkingSet64\tPrivateMemorySize64\tRam PC"); 
       Console.WriteLine($"{p.WorkingSet64}\t{p.PrivateMemorySize64}\t\t{ram}"); 
      } 

     } 
    } 
} 

は、.NET 4.61でのWindows Server 2012 R2上で実行しています。

出力:プロセスの

C:\XXX\perfmon>perfmon.exe 15800 
ProcessName:XXX.Windows.Services 
WorkingSet64 PrivateMemorySize64  Ram PC 
4294967295  4294967295    4.294967E+09 

PowerShellの出力:プロセスの

PS C:\Users\xxx> get-process -id 15800 | select-object -property workingSet64 
WorkingSet64 
------------ 
5079859200 

タスクリスト出力:

C:\Users\xxx>tasklist /FI "PID eq 15800" 

Image Name      PID Session Name  Session# Mem Usage 
========================= ======== ================ =========== ============ 
XXX.Windows.Services   15800 Services     0 5,031,424 K 

あなたが見ることができるように、C#のプロセスは、しかし4294967295で停止powershellまたはtasklistを使用して4 GBを超えるメモリを測定し続けます。

これは私のコードで問題になっているのですか、これはC#/ .netでメモリ測定に関する既知の問題ですか?

答えて

2

32ビットアプリケーションから64ビットプロセスを確実に監視することはできません.Wow64エミュレータで数値が調理され、UInt32.MaxValueのオーバーフローを防ぐことができます。ジッタを強制的に除去するだけで、64ビットプロセスとしても実行できます。

プロジェクト>プロパティ> [ビルド]タブ> [プラットフォームターゲット= AnyCPU、untick] 32ビットを推奨します。

+1

私は実際にはx64として構築しました。これは問題のようです。 –

1

あなたのコードに問題はありません.C#6.0の機能と32ビットと64ビットのプロパティの間にはまったく関係のない奇妙なやり取りがあると思われますが、PerformanceCounterのNextValue()メソッドは浮動小数点型です。

これは、問題は.NETとコードではなく、WMIのようなシステム内のものであると私につながります。可能性のある関連性:http://msdn.developer-works.com/article/13358955/Interesting+issue+with+ManagementEventWatcher+monitoring+registry+changes

関連する問題