簡體   English   中英

慢Microsoft.Office.Interop.Excel

[英]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版本
  • .NET Framework版本
  • SDK版本(如果使用VSTO)
  • 是否提供服務包
  • 機器的硬件規格
  • 執行時的資源使用情況(RAM,CPU,I / O等)
  • 機器上安裝的其他COM應用程序的數量

有多種方法可以加快Excel互操作代碼的速度,例如隱藏窗口(您已經在執行此操作)以及在操作期間將ScreenUpdating屬性設置為false。

但是,綜上所述,COM互操作從根本上是緩慢且笨拙的。 這是使用Excel文檔效率最低的方法。 為此,您最好使用OpenXML SDK 它是100%托管代碼,沒有外部依賴關系(甚至不需要在目標計算機上安裝Office)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM