0

Listener意志監視/RAM使用量の追跡を行いたい。

C#では、次を使用して作業使用量を取得できることを知っています

  public static class PerformanceInfo
  {
      [DllImport("psapi.dll", SetLastError = true)]
      [return: MarshalAs(UnmanagedType.Bool)]
      public static extern bool GetPerformanceInfo([Out] out PerformanceInformation       PerformanceInformation, [In] int Size);

      [StructLayout(LayoutKind.Sequential)]
      public struct PerformanceInformation
      {
        public int Size;
        public IntPtr CommitTotal;
        public IntPtr CommitLimit;
        public IntPtr CommitPeak;
        public IntPtr PhysicalTotal;
        public IntPtr PhysicalAvailable;
        public IntPtr SystemCache;
        public IntPtr KernelTotal;
        public IntPtr KernelPaged;
        public IntPtr KernelNonPaged;
        public IntPtr PageSize;
        public int HandlesCount;
        public int ProcessCount;
        public int ThreadCount;
      }

      public static Int64 GetPhysicalAvailableMemoryInMiB()
      {
          PerformanceInformation pi = new PerformanceInformation();
          if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
          {
            return Convert.ToInt64((pi.PhysicalAvailable.ToInt64() * pi.PageSize.ToInt64() / 1048576));
          }
          else
          {
            return -1;
          }

      }

      public static Int64 GetTotalMemoryInMiB()
      {
        PerformanceInformation pi = new PerformanceInformation();
        if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
        {
          return Convert.ToInt64((pi.PhysicalTotal.ToInt64() * pi.PageSize.ToInt64() / 1048576));
        }
        else
        {
          return -1;
        }

      }
    }
  }    

このリスナーはRAMUSAGEEVEry Secondを追跡する必要はありません。指定された%ageより大きい場合は、特定のプロセスを強制終了Kill Some Processesするようにアプリ(WPFアプリ)に通知する必要があります。

コードの一部をconstantlrにシステムをリッスンさせてから、いくつかのアクションを呼び出すにはどうすればよいですか?

この点でどんな助けでも素晴らしいでしょう。

4

1 に答える 1

0

Timer クラスで使用します。System.Timers.Timerのように、または単純なものでもThread.Sleep(1000)問題ありません (コードが別の非 UI スレッドで実行されると仮定します)。

于 2012-12-13T06:45:33.023 に答える