繁体   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