Winform 最小化的内部机制是什么? 由于调用了一个内存泄漏的Com组件, 导致垃圾无法回收, 试过用GC.Collect(), 不行...不过把windows窗体最小化了, 垃圾立刻就回收了. Winform最小化的内部机制是什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关键是你如何调用com的,是否真正释放Com所占用的资源;其次GC回收内存是不确定的,显示调用GC.Collect只是有时会起到作用。 windows是优化前台程序的,最小化是把物理内存转到虚拟内存上去了,不过对于.net,也许他内部有机制清楚那些标记为无效的对象释放内存吧。但如果是.net中用非托管代码造成的内存泄漏,除了关闭程序,我觉得没有办法自动释放。最小化绝对不可能释放真正的内存泄漏。所以,你看到的是假相,要么那个com本身没有内存泄漏,要么根本没有释放。 同意楼上的最小化其实就是发送一个程序的handle 和一个windows的message。估计真正起作用的不应该是这个最小化,而是触发了其它东西。 com服务器应该不是managed代码,垃圾回收管不到它吧。 最小化时,只是设置了workset,楼主,只要这样搞一下就可以了:GC.GetTotalMemory(true); try { IntPtr pnMaxWorkset = new IntPtr(1048576 * 2); IntPtr pnMinWorkset = new IntPtr(1048576 * 1); System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = pnMinWorkset; System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet = pnMaxWorkset; } catch (System.Threading.ThreadAbortException) { System.Threading.Thread.ResetAbort(); return; } catch (Exception ex) { Com.iFlytek.Framework.Log.TxtLogger.DumpException(ex); continue; } C#如何在托盘上显示系统菜单 高手接分,C#怎么做一个永远没有焦点的窗口? 问个正则表达式问题 (高分求解)如何判断一个中文字符串的编码是BIG5还是GB2312? 为什么按钮button20_Click会失效,非得重新生成button20_Click_1一个才行? 关于如何Hashcode的算法 关于。NET的校友录的一个问题。.. 如何确保与数据库的连接不断开呢? 在线急:选取一定范围的数据分类 $$$水晶報表的顯示問題$$$ while()循环什么时候退出的啊, 不好意思没有分了
其次GC回收内存是不确定的,显示调用GC.Collect只是有时会起到作用。
估计真正起作用的不应该是这个最小化,而是触发了其它东西。
GC.GetTotalMemory(true); try
{
IntPtr pnMaxWorkset = new IntPtr(1048576 * 2);
IntPtr pnMinWorkset = new IntPtr(1048576 * 1);
System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = pnMinWorkset;
System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet = pnMaxWorkset;
}
catch (System.Threading.ThreadAbortException)
{
System.Threading.Thread.ResetAbort();
return;
}
catch (Exception ex)
{
Com.iFlytek.Framework.Log.TxtLogger.DumpException(ex);
continue;
}