2009-05-31 16 views
1

シンプルなASP .NETヘルスチェッカーで作業していますが、いくつか障害があります。ASP .NET C#は、ページングされていないメモリの総使用量をリモートで取得します。

1)リモートマシン(同じネットワーク上)からページングされていないメモリ使用量をすべて取得できる必要があります。私はSystem.Diganostics.Process.NonpagedSystemMemorySize64を使ってみましたが、カーネルの非ページ使用量がその合計から抜け落ちることに気づきました。ここで私は何をやっていたの迅速なサンプルです:

Process[] myprocess = Process.GetProcesses("computername"); 

foreach (Process p in myprocess) 
{ 
nonpaged += p.NonpagedSystemMemorySize64; 
} 

2)私はあなたがローカルでのみ、そのクラスのAPIにアクセスすることができますがSystem.Diagnostics.PerformanceCounterを使用して、そのローカルに克服することができます。私のニーズに合った別のクラスがありますか?

ご協力いただければ幸いです。

答えて

1

以前私がこのマシン診断を取得するために使用した1つのソリューションは、DLLImportを使用することでした。

See P-Invoke

希望これは、DLLのインポートを使用する場合、関数を自分でラッパー宣言する必要があなたのコメント

への答えでは

ピート

に役立ちます。下のコードでは、DLLImported kernel32.dllにあるGlobalMemoryStatusという関数への外部呼び出しであることをコンパイラに示すpublic static extern voidが表示されます。関数の出力パラメータであるMemoryStatus構造体は、kernel32 dllの内部に格納され、完全に読み込まれて返されます。

これをコードにコピーし、理解するのに役立つコメントを読んでください。

/// <summary> 
     /// Populates a memory status struct with the machines current memory status. 
     /// </summary> 
     /// <param name="stat">The status struct to be populated.</param> 
     [DllImport("kernel32.dll")] 
     public static extern void GlobalMemoryStatus(out MemoryStatus stat); 


     /// <summary> 
     /// The memory status struct is populated by the GlobalMemoryStatus external dll call to Kernal32.dll. 
     /// </summary> 
     public struct MemoryStatus 
     { 
      public uint Length; 
      public uint MemoryLoad; 
      public uint TotalPhysical; 
      public uint AvailablePhysical; 
      public uint TotalPageFile; 
      public uint AvailablePageFile; 
      public uint TotalVirtual; 
      public uint AvailableVirtual; 
     } 

// copy the guts of this method and add it to your own method. 
public void InspectMemoryStatus() 
{ 

MemoryStatus status = new MemoryStatus(); 
      GlobalMemoryStatus(out status); 

    Debug.WriteLine(status.TotalVirtual); 
} 

これで、マシンのメモリ診断を取得できるはずです。

+0

私は何かが欠けていない限り、おかげでピート、 はしかし、非ページの使用または合計カーネルお​​よび/またはカーネルのページングの使用のためのGlobalMemoryStatusまたはGlobalMemoryStatusexのないプロパティがありません。 – jw0rd

+0

上記のように、MemoryStatus構造体には、メモリとページファイルと仮想メモリの使用に関するすべての情報があります。 – Peter

関連する問題