『QQ:1353814576』

C# SetProcessWorkingSetSize 减少内存占用 黑科技?


SetProcessWorkingSetSize 内存占用 黑科技

使用SetProcessWorkingSetSize函数其实并不能提高内存性能,也不会真实的节省物理内存,反倒是会造成一些意料之外内存错误问题,造成应用程序或者系统运行不稳定,看似可以优化物理内存,但程序运行时将占用内存强制转移虚拟内存中,严重的还会伤硬盘,微软官方也建议在建立进程,线程,内核池的时候,必须要小心的使用这个函数。

当然特殊情况下(需要让内存看起来占用似乎很小的样子,图个心里安慰) 使用方式如下

public static class MemoryHelper  
    {  
        #region 内存回收  
        /// <summary>  
        /// 内存回收接口 将内存数据缓存进硬盘 让资源管理器显得占用小  
        /// </summary>  
        /// <param name="process"></param>  
        /// <param name="minSize"></param>  
        /// <param name="maxSize"></param>  
        /// <returns></returns>  
        [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]  
        private static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);  
  
        public static void Clear()  
        {  
            try  
            {  
                GC.Collect();  
                GC.WaitForPendingFinalizers();  
                if (Environment.OSVersion.Platform == PlatformID.Win32NT)  
                {  
                   SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);  
                }  
            }  
            catch { }  
        }  
        #endregion  
    }

该方法只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用 所以慎用,自身代码优化好才是王道。