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;
        }

      }
    }
  }    

不,此侦听器应每秒跟踪 RAM 使用情况,如果它大于指定的 %age,则它应该Kill Some Processes或应该向我的应用程序(WPF 应用程序)提供一些通知以终止某些特定进程

我怎样才能让一段代码不断地听系统,然后调用一些动作

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

4

1 回答 1

0

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

于 2012-12-13T06:45:33.023 回答