C# 释放内存与进程的问题
我写了一个DATAGRIDVIEW转出数据到EXCEL的代码,程序完成后会在指定的目录产生一个excel的文档,代码要引用EXCEL组件,程序的最后我用了诸如下列的清空对像与垃圾回收:
objBook = null;
objBooks = null;
objSheets=null;
objSheet=null;
objRange=null;
objExcel.Quit();
GC.Collect();
但程序运行完后,存在两个问题:
1.耗用的内存未完全释放,达到250M,如何释放掉程序占用的而又不需要的内存?
2.有一个EXCEL.EXE的进程未关闭,在任务管理器中可以看到,需要关闭整个程序后这个EXCEL.EXE的进程才会关闭,如何能在代码运行完就关闭这个进程?
问题点数:50、回复次数:8Top
1 楼azurebz(撒哈拉大森林)回复于 2006-12-26 19:28:07 得分 0
帮顶,学习Top
2 楼maliang00111(存时间入瓶)回复于 2006-12-26 20:38:02 得分 20
1.垃圾回收器只是尝试释放没有被引用的对象并回收它们的内存,CG.collect很占用资源,建议不要使用.可以实现IDisposable接口的Dispose方法来完成在特定时间的资源释放.
2.用Process的Kill()方法强制终止进程.
Top
3 楼jcyluck(C# + SQL 2005 QQ群:26096739)回复于 2006-12-27 10:38:44 得分 0
有做过EXCEL引用的朋友肯定会有更好的方法Top
4 楼scow(怡红快绿之小橙子|和谐权是第4代人权)回复于 2006-12-27 10:49:35 得分 20
System.Runtime.InteropServices.Marshal.ReleaseComObject(xxx);Top
5 楼llyzcy(计算机辅助化工设计)回复于 2006-12-27 12:24:42 得分 0
upTop
6 楼wdy9927()回复于 2006-12-27 13:39:30 得分 0
mark
当初也有这问题,后来不了了之。
Top
7 楼KJ_Wang(Java Every Day)回复于 2006-12-27 15:48:45 得分 10
先关闭你这些对像,然后再写处理其他的,肯定可以。这种情况在VB6中经常碰到,因为没关对像,这样肯定内存被占用。继承自IDispose接口来做,这样可以全部释放。
Top
8 楼jcyluck(C# + SQL 2005 QQ群:26096739)回复于 2007-01-09 13:30:37 得分 0
还是没有解决Top




