C# 内存优化

文章介绍了如何解决内存占用问题,包括在C#中使用垃圾收集器和系统API进行内存清理,以及在调用C++DLL时如何正确处理内存释放,强调了不同调用约定下内存管理的责任归属。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、内存占用大量资源的解决办法
1.定时清理

#region 内存回收
[DllImport("kernel32.dll")]
private static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
	    private static void FlushMemory()
	    {
	        GC.Collect();
	        GC.WaitForPendingFinalizers();
	        if (Environment.OSVersion.Platform == PlatformID.Win32NT)
	            SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
	    }
#endregion
// 定时销毁不用的内存
private void timer1_Tick(object sender, EventArgs e)
{
    FlushMemory();
}

通过检查工具定位
https://blog.csdn.net/jianingshow/article/details/79096637
二、调用C++的DLL 后释放内存
如果是stdcall调用,就是由dll释放
如果是cdecl调用,就是谁调用谁释放

要想成功释放非托管代码分配的内存,必须先确定非托管代码的内存分配方式,才能在互操作是选择正确的方法释放非托管内存,在非托管代码中,有3种分配方式:

1、C语言:malloc 、free
2、C++:new、delete
3、COM:CoTaskMenAlloc、CoTaskMenFree

第三种方式是互操作默认的释放非托管内存的方法!也就是说,采用前两种方式分配的非托管内存,托管代码不能正确释放,必须由非托管方自己明确释放:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值