【发布时间】:2015-10-28 18:38:09
【问题描述】:
我正在使用 VSTO 为 Excel 编写一个性能关键(不是全部)加载项,作为其中的一部分,我正在打包 Excel 功能,这样我就不会总是以 dynamic 结束返回基本 VSTO 接口。
我的一个包装器是用于Range 接口的,为此我正在计算一个矩形,它基于Range 描述左上角和右下角的单元格以进行总结。 Range 可能只是一个单元格,也可能是当前工作表的使用范围。
所以我计算左上角坐标的代码看起来像......
var x = excelRange.Column;
var y = excelRange.Row;
并计算右下角坐标看起来像......
var columnsCount = excelRange.Columns.Count;
var rowsCount = excelRange.Rows.Count;
var x = columnsCount * topLeftCoordinate.X;
var y = rowsCount * topLeftCoordinate.Y;
这既好又简单,而且我认为在性能方面也相对没有痛苦,因为我不想多次从 Range 接口请求这些值。
不幸的是,在分析了我的应用程序并创建了 2631 个不同大小(从 1x1 到 10x1)的矩形之后,我可以看到,简单地计算这些值会占用我应用程序时间的 18%/600 毫秒左右,所有这些都在对 VSTO 的调用中Range接口。
是否有另一种方法可以在不需要 4 次调用 Range 接口的情况下获得范围大小,还是我最好简单地重构我的代码,以便对于 1x1 范围我不为此计算矩形?
【问题讨论】: