一、内存占用大量资源的解决办法
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
第三种方式是互操作默认的释放非托管内存的方法!也就是说,采用前两种方式分配的非托管内存,托管代码不能正确释放,必须由非托管方自己明确释放:
文章介绍了如何解决内存占用问题,包括在C#中使用垃圾收集器和系统API进行内存清理,以及在调用C++DLL时如何正确处理内存释放,强调了不同调用约定下内存管理的责任归属。
1701

被折叠的 条评论
为什么被折叠?



