WPF 内存释放

 方法一:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值