关于C#调用Excel的资源占用问题
需要引用的命名空間
using Execl = Microsoft.Office.Interop.Excel;
Codetry
????????????{
????????????????Microsoft.Office.Interop.Excel.Application?excel?=?new?Microsoft.Office.Interop.Excel.Application();
????????????????Microsoft.Office.Interop.Excel.Workbook?workbook?=?excel.Workbooks.Open(lujing2,?System.Type.Missing,?false,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing,?System.Type.Missing);
????????????????excel.Visible?=?true;
????????????????Microsoft.Office.Interop.Excel.Worksheet?worksheet?=?(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1);
????????????????//開始執(zhí)行Excel操作
????????????????if?(excel.ActiveWorkbook.Saved?==?false)
????????????????{
????????????????????excel.ActiveWorkbook.Save();
????????????????}
????????????????excel.Quit();
????????????????excel?=?null;
????????????????Application.Exit();
????????????????GC.Collect(System.GC.GetGeneration(worksheet));
????????????????GC.Collect(System.GC.GetGeneration(workbook));
????????????????GC.Collect(System.GC.GetGeneration(excel));
????????????}
????????????catch
????????????{
????????????}
????????????finally
????????????{
????????????????GC.Collect();
????????????}
?同時,這里有一個比較有爭議的問題,我特此聲明下:微軟強烈建議不要通過GC.Collect方法來強制執(zhí)行垃圾手機,因為那會妨礙GC本身的工作方式。只有在明確知道有大量對象停止引用時,才考慮使用GC.Collect方法來調(diào)用收集器。
微軟針對excel提供的com還是非常不錯的,還請朋友們不要錯怪于它。
關(guān)于網(wǎng)友的回復(fù)的補充:www.elivn.com
Excel是否是托管資源,根本就談不上,我覺得這是不同層面的東西,關(guān)鍵是我們的程序是通過調(diào)用com來對excel進行交互的,我們的com應(yīng)該不是非托管資源吧。
再舉個例子:web中常見的文件上傳與文件打包下載,這些文件是托管資源還是非托管資源,其實什么都算不上,更談不到什么釋放與不釋放的問題了。唯獨有一點不同就是對excel的操作是獨占的。
我們的程序調(diào)用com,com去和excel執(zhí)行操作,按照正常的代碼規(guī)范,這些都是可以正常被釋放的。
使用kill掉的程序,就像excel被突然結(jié)束掉,可能會產(chǎn)生碎片等等,嚴(yán)重的excel還會被損壞,更有甚者,excel的進程根本就kill不掉,反倒會讓你的程序產(chǎn)生異常,造成根本無法預(yù)料到的損失。
再比如說,com都做了些什么工作,就像正常的用戶打開一個excel,執(zhí)行了些操作,然后把excel關(guān)閉了,我們不需要再讓第三方軟件去執(zhí)行什么內(nèi)存的釋放工作。
不同層面的東西,不要放一塊,否則會把自己都搞的很亂。
不知道我講的夠不夠清楚,還是我本身理解的有問題,歡迎指出,我們一起探討。
轉(zhuǎn)載于:https://www.cnblogs.com/seoxs/archive/2011/04/29/2032698.html
總結(jié)
以上是生活随笔為你收集整理的关于C#调用Excel的资源占用问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 成长源于改变
 - 下一篇: Oracle笔记 八、PL/SQL跳转/