Salut J'ai écrit ce petit échantillon de AddIn vous montrer un problème de performance et comment l'éviterVSTO excel problème de performance objet
que quelqu'un peut me expliquer pourquoi et comment cela fonctionne? Il s'agit simplement d'une analyse d'un classeur Excel exécuté dans le processus Excel principal (0) et d'un fil aléatoire créé par la minuterie.
Merci!
Public Class ThisAddIn
Dim a As System.Windows.Threading.Dispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher()
Dim t As New Threading.Thread(New Threading.ParameterizedThreadStart(AddressOf threadTest))
Dim tm As New System.Timers.Timer(20000)
Delegate Sub TestHandler()
Dim tt As TestHandler = AddressOf test
Private Sub ThisAddIn_Startup() Handles Me.Startup
tm.AutoReset = True
tm.Start()
AddHandler tm.Elapsed, AddressOf threadTest
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Public Sub test()
Dim appE As Excel.Application = Globals.ThisAddIn.Application
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
End Sub
Private Sub threadTest()
' 800 ms
Dim o() As Object
a.Invoke(tt, o)
'12 seconds !
test()
End Sub
End Class
Vous nous demandez de déterminer si votre complément fonctionne et pourquoi? Il semble que vous seriez le plus capable de le faire. – IAmTimCorey
Je ne vois aucune analyse de la feuille de calcul qui se passe ici. Tout ce que je vois, c'est que vous essayez d'écrire un nombre de 1 à 10 000 à la cellule A1 dans une boucle forcée dans un appel fileté. – code4life
Encore une chose à réaliser est que chaque fois que vous appelez rng.Value, c'est en fait un appel de fonction COM que vous faites. Dans VSTO, le meilleur moyen de réduire les frais généraux est de réduire le plus possible les appels de fonctions COM dans leur ensemble. – code4life