在我的应用程序中,我使用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对象的通信速度以及如何使其更快?
答案 0 :(得分:1)
有很多因素可能会影响互操作代码的性能:
有一些方法可以加速Excel互操作代码,例如隐藏窗口(您已经这样做了)并在操作期间将ScreenUpdating
属性设置为false。
但是,说到这一切,COM互操作基本上是缓慢而笨重的。这是使用Excel文档的最低效方法。你最好使用OpenXML SDK来做这件事。它是100%托管代码,没有外部依赖项(甚至不需要在目标计算机上安装Office)。