Excel在.Net下驻留内存的解决方法

Excel在.Net下驻留内存的解决方法,第1张

Excel在.Net下驻留内存的解决方法,第2张

在这段时间里,在VS 2003的WebForm模式下操作Excel时,遇到的最麻烦的一个问题就是Excel操作完后无法正常关闭。系统退出后,Excel始终驻留在内存中。不过这段代码放到WinForm的程序里就没有问题了。在网上搜了一下,没有找到有效可行的方法。经过无数次尝试,解决方案最终如下:

原文如下:

以下是一段引文:
PrivateExcel。应用M _ app
私有Excel。工作簿m _ workbook
this.m_app =新Excel。application class();
this.m_app。显示警报=假;
this . m _ workbook = this . m _ app。Workbooks.Open(sFilePath,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值);


修改如下:

以下是引用片段:
PrivateExcel。应用M _ app
私有Excel。Workbooks m _ workbooks
私有Excel。工作簿m _ workbook
this.m_app =新Excel。application class();
this.m_app。显示警报=假;
m_workbooks = this.m_app。工作簿;
this . m _ workbook = this . m _ workbooks。打开(sFilePath,缺少。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值,缺失。值,缺失。值,
丢失。值);


对工作表的相同操作如下

修改前如下:

以下是引用片段:
Excel。_ Worksheet工作表1 = null
工作表1 = (Excel。_Worksheet) this.m_workbook。worksheets . get _ Item(sSheetName);
修改如下:
Excel。Sheets sheets = null
Excel。_ Worksheet worksheet1 = null
sheets = this.m_workbook。工作表;
工作表1 = (Excel。_ Worksheet)sheets . get _ Item(sSheetName);


你发现区别了吗?最初,Workbooks和Worksheets这两个类未经实例化就被直接使用,这使得该类无法被回收。最后,Excel驻留在内存中。

最后以如下方式发布。以下是引用片段:
Private Void release allref(object obj)
{
Try
{
If(obj!= null)
{
while(Marshal。ReleaseComObject(obj)> 1);
}
}
finally
{
obj = null;
}
}
private void Release()
{
if(m _ app!= null )
{
m_app。quit();
}
release allref(m _ workbook);
m _ workbook = null;
ReleaseAllRef(m _ workbooks);
m _ workbooks = null;
ReleaseAllRef(m _ app);
m _ app = null;
系统。GC.Collect()。
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Excel在.Net下驻留内存的解决方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情