HQT

追求.NET 技术永无止境

导航

关于 Excel 的结束进程的方法讨论

Posted on 2005-11-24 22:30  HQT  阅读(669)  评论(0编辑  收藏  举报

网上这个问题已经多得不能再多了,
几乎有涉及 .net 操作 Excel ,必然有人问。
有提到用 GC.Collect 强制垃圾回收的,但不一定管用
(我测试过,第一个进程无论如何都释放不了,其他新建的进程可以被不断替换掉)
不过这样强制回收可能造成其他对象资源管理的问题,还是不大妥当。

后来想到一个方法:
通过创建时的进程ID,在不使用Excel对象时,将该ID结束掉。
比如自己写个Excel操作类,在这个类实例化时,通过遍历进程列表,判断所有Excel进程的创建时间,
将最短的时间作为自己新创建的Excel进程(由于此操作时间极短,理论上应该可以避免并发操作造成的失误),然后获取这个进程的 ProcessID ,保存起来。
当使用完这个类的实例对象后,再通过 ProcessID 获取到进程,调用 Kill 直接杀死。
基本上都不会出现什么错误。

当然还有种情况,如果在操作Excel中途被强行中止了程序(比如Web网页直接关掉之类),
那Excel进程就无法释放了?怎么解决?

简单,可以在前面遍历进程列表获取最短时间的时候,加个判断,是否超出超时时间(比如设定1天为超时时间,如果创建时间与当前时间的差值大于这个超时时间,则直接 Kill  掉即可)

well....