立即释放.net下的com组件

众所周知,在.net的世界里,程序员只负责使用new创建对象,而对象的销毁则完全交给垃圾回收器负责,只有当发生垃圾回收的时候,.net中的类型才会被销毁。这通常不会引起什么不妥。但是,当使用了非托管的com对象的时候,则会带来特别的问题。
com使用引用计数来确定对象的生存期,com客户每次引用对象的时候,就调用
IUnKnown->AddRef(),而每次释放对象的时候,就调用
IUnKnown->Release(),一旦引用计数达到零,就释放实例。
问题就这样产生了,让我们看下面的代码:
这是在CSDN的asp.net版广为流传的一段使用excel com组件导出excel文件到客户端的c#代码,在添加这段代码之前,运行了添加com引用的向导。
b.gif Excel.Application  oExcel;  
b.gifExcel.Workbook  oBook;  
b.gifObject  oMissing  
=   System.Reflection.Missing.Value;  
b.gifoExcel  
=    new   Excel.Application();  
b.gifoBook  
=   oExcel.Workbooks.Add(oMissing);  
b.gif
for   ( int   i = 1 ;i   <= 4 ;i ++ )  
b.gifb.gif
b.gif {  
b.gif oExcel.Cells[i,
1]=i.ToString();  
b.gif oExcel.Cells[i,
2]=  "'bbb2  ";  
b.gif oExcel.Cells[i,
3]=  "'ccc3  ";  
b.gif oExcel.Cells[i,
4]=  "'aaa4  ";  
b.gif}
  
b.gifoBook.Saved  
=    true ;  
b.gifoExcel.UserControl  
=    false ;  
b.gif
string  filename  =  DateTime.Now.Ticks.ToString();
b.gif
string   mm = Server.MapPath(   " . " ) +   " \\ "   +  filename  +   " .xls " ; // 服务器保存地址  
b.gif
oExcel.ActiveWorkbook.SaveCopyAs  (mm);  
b.gifoExcel.Quit();
b.gif
// GC.Collect();
b.gif
Response.Redirect(filename + " .xls " );
posted @ 2010-04-20 16:25 MokLiu 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/satng/archive/2010/04/20/2138898.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值