Super !!!
J'ai utilisé l'approche du réseau bidimensionnel et réalisé l'énorme augmentation de performance !!
Auparavant, j'utilisé le aprroach cellule par cellule, comme indiqué ci-dessous,
Dim cell As Excel.Range = Nothing
cell = sheet.Cells(rowIndex, colIndex)
cell.Value = "Some value"
I utilisé pour effectuer une itération sur une plage de cellules et utilisées pour copier la valeur dans chaque cellule. Ici, chaque sheet.Cells
et cell.Value
est un appel interop et pour chaque appel, il donne appel à Excel.exe, ce qui coûte plus de temps.
Dans l'approche 2D J'ai rempli les données, qui doivent être copiées dans des cellules Excel, dans un tableau 2D et ensuite assigné le tableau 2D à la valeur de la réorganisation sélectionnée des cellules. Il est comme indiqué ci-dessous,
Dim darray(recordCount - 1, noOfCol - 1) As String
//Fill the data in darray
//startPosRange = Get the range of cell from where to start writing data
startPosRange = startPosRange.Resize(recordCount, noOfCol)
startPosRange.Value = darray
Après ces modifications, j'ai rassemblé les données de performance pour les deux approches et les résultats sont étonnamment grande !!. La dernière approche est 25 fois plus rapide que la précédente.
De même, j'ai utilisé l'approche de tableau 2D pour lire des données à partir de cellules et vu la même amélioration des performances. Les exemples de code sont indiqués ci-dessous.
approche cellulaire par cellule,
Dim usedRange As Excel.Range = sheet.UsedRange
For Each row As Excel.Range In usedRange.Rows()
For Each cellData As Excel.Range In row.Cells
//Gather cellData.Value in some container.
Next
approche tableau 2D,
Dim usedRange As Excel.Range = sheet.UsedRange
//Here the array index starts from 1. why???
Dim darray(,) As Object = CType(usedRange.Value, Object(,))
Dim rows As Integer = darray.GetUpperBound(0)
Dim cols As Integer = darray.GetUpperBound(1)
For i As Integer = 1 To rows
For j As Integer = 1 To cols
Dim str As String
If darray(i, j) Is Nothing Then
str = ""
Else
str = darray(i, j).ToString
End If
//Use value of str
Next
Next
S'il vous plaît se référer, http://support.microsoft.com/kb/306023, http://dotnetperls.com/excel-interop (merci ChickSentMeHighE pour le lien)
Profitez du performance!!!
Vinod, merci de prendre le temps de poster vos résultats détaillés! – Joost