我正在使用VSTO編寫一個性能至關重要的(不是所有內容)Excel表格,並且作爲其中的一部分,我正在包裝Excel功能,以便我不總是以dynamic
從基本VSTO接口返回。Excel 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%/ 600ms,所有這些都在調用VSTO Range
接口。
是否有另一種獲得範圍大小的方式,而不需要4次調用Range
接口,或者我更好地簡單地重構我的代碼,以便對於1x1範圍我不計算矩形?
這是我在考慮過之前考慮過的事情,但它創建了一個額外的問題,將Address的字符串表示轉換爲索引(因爲我使用Range範圍來限制從別處索引到一個數組中)似乎沒有什麼價值,因爲從界面中獲得一些'int'是很容易的。看起來這可能是我必須去減少的方式在interop上的呼叫數量。 –