public class RevokeMemory { public static void ReduceMemoryFootPrint() { int currentMinWorkingSetValue = 0 ; int currentMaxWorkingSetValue = 0 ; Process currentProcess = Process.GetCurrentProcess(); try { if (GetProcessWorkingSetSize(currentProcess.Handle, out currentMinWorkingSetValue, out currentMaxWorkingSetValue)) { currentProcess.MinWorkingSet = (IntPtr)currentMinWorkingSetValue; } } catch (Exception err) { string additionalInfo = " MinWorkingSet value is set to: " + currentMinWorkingSetValue.ToString(); additionalInfo += " Process In Error: " + currentProcess.ProcessName; // Log error message } } [DllImport( " kernel32.dll " )] public static extern bool GetProcessWorkingSetSize( IntPtr proc, out int min, out int max ); [DllImport( " kernel32.dll " )] public static extern bool SetProcessWorkingSetSize( IntPtr proc, int min, int max ); }
调用的时机: 1. 主界面上做一个计时器,每间隔一定的时间进行调用,但鄙人认为这种效果并不好。在你进行长时间运行的操作之前。需要禁止它。 2.每完成一个大的操作或者比较消耗内存的操作之后,调用。 本人做了一个测试,以前几时兆的内存飙升,现在总的消耗的内存都在几兆到30兆之间了. 不信你可以试一试.