WPF 内存释放

tech2024-01-26  85

 方法一:

GC.Collect(); GC.WaitForPendingFinalizers(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) {   SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); } [DllImport("kernel32.dll")] private static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);

通过通知系统最大最小化来触发内存释放,不过该方法也只是将部分内存移至虚拟内存中。

方法二:

Nuget 中 Lierda.WPFHelper,再AppStratup时,new一下,然后内存基本可以压缩到50MB以内,这个DLL每30s压缩一次内存,最低可以压缩到10MB。

/// <summary> /// App.xaml 的交互逻辑 /// </summary> public partial class App : Application { LierdaCracker cracker = new LierdaCracker(); protected override void OnStartup(StartupEventArgs e) { cracker.Cracker(100);//垃圾回收间隔时间 base.OnStartup(e); } }

PS:通过反编译得知,该方法的原理也是方法一。

 

总之不是真的释放内存,但是只是为了一个立竿见影的效果,可以临时用一下。

本身会更加损耗硬盘。同时如果程序有内存泄露的问题,也依然会出现内存溢出的情况。

这里有大神总结的结论,我就不重复粘贴了:https://www.cnblogs.com/kex1n/p/4043901.html

最新回复(0)