日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Excel在.Net 环境下Web方式下驻留内存问题的解决

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Excel在.Net 环境下Web方式下驻留内存问题的解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這段時間在VS?2003?WebForm?方式下對Excel?進行操作,遇到一個最為頭疼的問題就是對Excel操作完畢后Excel不能夠正常關閉,系統退出后,Excel總是駐留在內存中。但是這段代碼放到WinForm的程序中又沒有問題。在網上進行了查找也沒有找到有效可行的辦法。經過無數次的嘗試,終于解決如下:

原來書寫如下:

private?Excel.Application?m_app;

private?Excel.Workbook?m_workbook;

this.m_app?=?new?Excel.ApplicationClass();

this.m_app.DisplayAlerts?=?false;

this.m_workbook?=?this.m_app.Workbooks.Open(sFilePath,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,

????????????Missing.Value?);

修改后如下:

private?Excel.Application?m_app;

private?Excel.Workbooks?m_workbooks;

private?Excel.Workbook?m_workbook;

this.m_app?=?new?Excel.ApplicationClass();

this.m_app.DisplayAlerts?=?false;

m_workbooks?=?this.m_app.Workbooks;

this.m_workbook?=?this.m_workbooks.Open(sFilePath,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,?

??????????????Missing.Value,?Missing.Value,?Missing.Value,

????????????Missing.Value?);

?

同樣對Sheet的操作如下

修改前如下:

Excel._Worksheet?worksheet1?=?null;

worksheet1?=?(Excel._Worksheet)?this.m_workbook.Worksheets.get_Item(sSheetName);

修改后如下:

Excel.Sheets?sheets?=?null?;

Excel._Worksheet?worksheet1?=?null;

sheets?=?this.m_workbook.Worksheets;

worksheet1?=?(Excel._Worksheet)?sheets.get_Item(sSheetName);

發現區別了么?原來WorkbooksWorksheets這兩個類沒有被實例化就直接使用了,造成該類不能夠被回收。最終造成Excel在內存的駐留。

最終以如下方式釋放。

private?void?ReleaseAllRef(Object?obj)

{

try

??????????????{

??????????????if?(obj?!=?null?)

????????????????????????????{

??????????????????????????????????????????while?(Marshal.ReleaseComObject(obj)?>?1);

????????????????????????????}

??????????????}

??????????????finally

??????????????{

????????????????????????????obj?=?null;

??????????????}

}

private?void?Release()

{

??????????????if?(m_app?!=?null?)

??????????????{

????????????????????????????m_app.Quit()?;

??????????????}

??????????????ReleaseAllRef(m_workbook)?;?

??????????????m_workbook?=?null?;?

??????????????ReleaseAllRef(m_workbooks)?;?

??????????????m_workbooks?=?null?;?

??????????????ReleaseAllRef(m_app)?;?

??????????????m_app?=?null?;?

??????????????System.GC.Collect()?;

}
?

總結

以上是生活随笔為你收集整理的Excel在.Net 环境下Web方式下驻留内存问题的解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。