[英]Slow Microsoft.Office.Interop.Excel
在我的應用程序中,我正在使用C#代碼自動生成Excel文件。 此應用程序可用於多種環境(計算機)。 在一台計算機上,生成此文件的速度比在所有其他計算機上要慢。
例如,以下代碼在該計算機上的運行速度降低了90%:
using Excel = Microsoft.Office.Interop.Excel;
...
Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook xlBook = workbooks.Open(@"C:\a\a.xlsx", 0, false, 6, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets.get_Item("Sheet1");
Excel.Range oRange = xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[2, 2]);
object[,] a = new object[1, 1];
a[0, 0] = "1";
oRange.Value2 = a;
xlBook.Save();
xlApp.Visible = false;
xlApp.Workbooks.Close();
get_Range方法在該計算機上慢2倍。
有人知道我如何找出減慢Excel Interop COM對象通信的速度以及如何使其更快地通信嗎?
有很多因素可能會影響互操作代碼的性能:
有多種方法可以加快Excel互操作代碼的速度,例如隱藏窗口(您已經在執行此操作)以及在操作期間將ScreenUpdating
屬性設置為false。
但是,綜上所述,COM互操作從根本上是緩慢且笨拙的。 這是使用Excel文檔效率最低的方法。 為此,您最好使用OpenXML SDK 。 它是100%托管代碼,沒有外部依賴關系(甚至不需要在目標計算機上安裝Office)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.