使监听器检测内存使用情况

时间:2012-12-13 06:39:37

标签: c# .net wpf memory-management

我希望Listener能够观看/跟踪内存使用情况。

我知道在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;
        }

      }
    }
  }    

没有这个监听器应该跟踪RAM USAGE EVEry Second,如果它超过指定的%age,那么它应该Kill Some Processes或者应该向我的应用程序(WPF应用程序)提供一些通知以杀死某些特定进程

我如何制作一段代码constantlr监听系统然后调用一些动作

在这方面的任何帮助都会很棒..

1 个答案:

答案 0 :(得分:0)

使用Timer类。像System.Timers.Timer甚至简单Thread.Sleep(1000)一样可以(假设您的代码在单独的非UI线程上运行)。