配合互操作事件增加Excel VBAmacros执行时间

我有一个接线事件的事件会导致一个vbamacros在执行时间加倍,即使事件没有被触发。

从C#interop我调用一个Excel工作簿中的macros来计算保险单的专业评级信息。 这本工作手册还要求另外一本工作手册来计算一些标准评分数字。 我还打开工作簿上的事件,以便如果用户打开一个单独的(不相关的)电子表格,它将在单独的应用程序实例中打开。 这一切工作正常。

用户在VDI环境中运行。 他们抱怨,因为这个过程需要30秒,他们希望更快。 在物理机器上,通常只需要3-10秒,具体取决于策略。

在testing中,我注意到,如果我没有连接工作簿公开事件,那么这个过程快两倍(或更多)。 一旦我添加了事件macros,需要两倍的时间才能完成。 即使事件中的代码没有被触发,也会发生这种情况。 我已经添加了断点和日志来检查这一点。 事件没有被input(除非我打开另一个电子表格当然)。

我们也有一个Excel的自定义VSTO加载项。 我卸载了这个,但它没有任何区别。 我已经testing过将互操作工作簿开放代码移入加载项,并设法获得快速的执行时间,但高级开发人员宁愿我不把代码放在那里。 所以我的问题是,为什么configuration互操作工作簿打开事件会导致执行时间的增加,并且有没有一种方法可以防止将代码移入加载项? 我正在使用Excel 2010。

相关代码如下:

var args = new object[] {"RateProcess", "StandardRating.xls"}; _spreadsheet = new Application(); Workbooks workbooks = _spreadsheet.Workbooks; _commonWorkbook = workbooks.Open("StandardRating.xls", 0, false, 5, "", "", true, XLPlatform.xlWindows, "\t", true, false, 0, false, false, XLCorruptLoad.xlNormalLoad); _specialisedWorkbook = workbook.Open("SpecialisedRating.xls", 0, false, 5, "", "", true, XlPlatform.xlWindows, "\t", true, false, 0, false, false, XlCorruptLoad.xlNormalLoad); // This line causes the problem. _spreadsheet.WorkbookOpen += spreadsheet_WorkbookOpen; _spreadsheet.GetType().InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, _spreadsheet, args);