我有一個C#程序,我從Excel文件中讀取數據,其中包含大約40000個數字。這是我的代碼的一部分:如何在C#中運行程序後釋放內存?
Microsoft.Office.Interop.Excel.Application _excelApp = new Microsoft.Office.Interop.Excel.Application();
_excelApp.Visible = true;
string fileName = "D:\\data.xlsx";
Workbook workbook = _excelApp.Workbooks.Open(fileName, Type.Missing);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
Range excelRange = worksheet.UsedRange;
Object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
int num = worksheet.UsedRange.Rows.Count;
workbook.Close(false, Type.Missing);
_excelApp.Quit();
for (int row = 1; row <= num; ++row)
{
data1.Add(Convert.ToDouble(valueArray[row, 1]));
data2.Add(Convert.ToDouble(valueArray[row, 2]));
}
我每次運行該程序,Excel文件出現了一會兒,被關閉。但是在windows的後臺進程中有一些打開的excel文件,並且會消耗ram並降低windows的速度。我怎樣才能完全關閉excel文件,並退出我的代碼中的內存?
謝謝。
噢,你的意思是如何在後臺關閉OTHER excel文件? –
我不知道爲什麼這會得到低調,調用'GC.Collect()'後跟'GC.WaitForPendingFinalizers();'是解決excel問題的正確方法。調用'FinalReleaseComObject'是做這件事的錯誤方式,但是這個答案在整個互聯網上都是猖獗的。唯一需要注意的是,如果使用COM對象的相同方法執行此操作,它將不會以調試模式收集對象,也不會收集由於調試器完成的對象生命週期擴展而連接的調試器。 –
我測試了這個建議。但它沒有任何效果! – Yaser