我在VB中使用VS2010編寫Office Excel 2007的Excel AddIn,並且在與PowerPoint中的Excel對象模型交互時出現嚴重的性能問題。 請在下面找到一個基本的測試來演示問題(子測試())。Excel對象模型性能問題(跨應用程序域和線程)
- 直接從PowerPoint中調用Excel對象模型:
我們與不同的結果,4周不同的方式嘗試這個代碼在平均13號第
- 調用從PowerPoint驗證碼槽通過一個Excel主辦的WCF服務Addin:平均9 s
- 通過計時器從Excel插件調用此代碼(啓動時,等待20秒並啓動測試()):9 s
- 通過功能區按鈕直接從Excel插件調用代碼:800ms
我可以理解1.爲什麼速度慢,因爲代碼與Excel不在同一AppDomain中。 我也可以理解爲什麼2.和3.因爲代碼沒有在Addin Thread中執行而很慢。 但我想不出任何其他解決方案來解決我的性能問題。
最後,我有兩個問題
1)我在正確的軌道上,當我說的方法2和3是因爲多線程的慢?
2)一般來說,如何從.Net應用程序中使用Excel對象模型,並且不會有這樣的性能損失。
提前感謝您的任何想法。
薩科
Public Sub test(ByVal appE As Excel.Application)
Dim chrono As New System.Diagnostics.Stopwatch
chrono.Start()
appE.Interactive = False
appE.ScreenUpdating = False
Dim wb As Excel.Workbook = appE.ActiveWorkbook
Dim ws As Excel.Worksheet = wb.ActiveSheet
Dim rng As Excel.Range = ws.Cells(1, 1)
Dim nbit As Integer = 10000
For i = 1 To nbit
rng.Value = i
Next
appE.ScreenUpdating = True
appE.Interactive = true
chrono.Stop()
MsgBox(chrono.ElapsedMilliseconds.ToString + " " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString)
End Sub