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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

关于C#调用Excel的资源占用问题

發布時間:2025/4/14 C# 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于C#调用Excel的资源占用问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
無意中想起2年前做的一個小項目,自己也遇到過Excel的進程無法結束掉的這種怪問題,最終還是解決了,其實解決的原理很簡單,Excel是一個很特殊的東西,所有對它的操作都是獨占的,因此就有必要在資源釋放上嚴格進行。為了更好的跟大家交流,也同時幫助那些正在被困惑的程序員朋友們,下面就附上我以前的一段小代碼,為了能夠更快更容易說明問題,代碼經過了刪減,只保存了結構的完整性,但不保證能夠順利編譯通過,代碼如下:

需要引用的命名空間

using Execl = Microsoft.Office.Interop.Excel;

Code
try
????????????{
????????????????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);
????????????????
//開始執行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方法來強制執行垃圾手機,因為那會妨礙GC本身的工作方式。只有在明確知道有大量對象停止引用時,才考慮使用GC.Collect方法來調用收集器。

微軟針對excel提供的com還是非常不錯的,還請朋友們不要錯怪于它。

關于網友的回復的補充:www.elivn.com

Excel是否是托管資源,根本就談不上,我覺得這是不同層面的東西,關鍵是我們的程序是通過調用com來對excel進行交互的,我們的com應該不是非托管資源吧。
再舉個例子:web中常見的文件上傳與文件打包下載,這些文件是托管資源還是非托管資源,其實什么都算不上,更談不到什么釋放與不釋放的問題了。唯獨有一點不同就是對excel的操作是獨占的。
我們的程序調用com,com去和excel執行操作,按照正常的代碼規范,這些都是可以正常被釋放的。
使用kill掉的程序,就像excel被突然結束掉,可能會產生碎片等等,嚴重的excel還會被損壞,更有甚者,excel的進程根本就kill不掉,反倒會讓你的程序產生異常,造成根本無法預料到的損失。
再比如說,com都做了些什么工作,就像正常的用戶打開一個excel,執行了些操作,然后把excel關閉了,我們不需要再讓第三方軟件去執行什么內存的釋放工作。
不同層面的東西,不要放一塊,否則會把自己都搞的很亂。
不知道我講的夠不夠清楚,還是我本身理解的有問題,歡迎指出,我們一起探討。

轉載于:https://www.cnblogs.com/seoxs/archive/2011/04/29/2032698.html

總結

以上是生活随笔為你收集整理的关于C#调用Excel的资源占用问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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