.Net程序中如何彻底关闭Excel - 关闭进程外COM方法

在.Net中, 经常我们会利用Excel来展现数据. 我们知道此时, Excel做为一个进程外COM被激活. 可是却无法彻底关闭该进程. 这是什么原因呢?

COM的生命周期依靠计数机制,只有当引用计数为零时,该COM才会被释放.

.Net程序能调用COM,依赖于RCW(运行库可调用包装)组件,它负责把.Net方法的调用参数转化为COM接口中的参数,并调用相应的COM接口, 然后将返回结果最终返回给.net程序的方法.

因此,当在.Net中操作Excel的方法时,意味着RCW在引用Excel中的对象,所以为了彻底关闭Excel,必须将对于这些对象的引用计数清零.在.Net中提供了Marshal.ReleaseComObject .

为了方便起见,可封装如下方法:

  private void NAR(object o)
  {
   try
   {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
   }
   catch {}
   finally
   {
    o = null;
   }
  }

由于垃圾回收的原因,CLR并不会立即回收对象.所以为了能够立即回收,那么可以调用GC.Collect()来迫使垃圾回收器起作用.

具体的例子请参考: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B317109

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值