Pregunta

Tengo la lista (de clase). que tiene 1800 de recuento y cada objeto tiene 90 propiedades. Cuando Terate Earch con 90 propiedades tomando cada vez más tiempo. ¿Cómo resolver este

 Dim cellIntStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
 cellIntStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#")

 Dim cellDateStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
 cellDateStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat(Format
                                                     ("dd-MMM-yyyy"))
 For Each mReport As Report In dtExcel
        row = sheet1.CreateRow(iRow)
        j = 0
        For Each prop As PropertyInfo In props
            Dim value As Object = prop.GetValue(mReport, Nothing)
            If IsInt(value) Then
                CreateRow(row, j, CType(value, Integer), cellIntStyle)
            ElseIf IsDate(value) Then
                CreateRow(row, j, String.Format("{0:dd-MMM-yyyy}", 
                                          value), cellDateStyle)
            Else
                CreateRow(row, j, value)
            End If
            j = j + 1
        Next

        iRow = iRow + 1 // Coming here taking so long... how to make it fast.
    Next



    Private Sub CreateRow(ByRef row As HSSFRow, ByVal colId As Integer, 
                                          ByVal value As String)
        row.CreateCell(colId).SetCellValue(value)
    End Sub
    Private Sub CreateRow(ByRef row As HSSFRow, ByVal colId As Integer, 
                                ByVal value As Integer, 
                                ByVal cellStyle As HSSFCellStyle)
        Dim cell As HSSFCell = row.CreateCell(colId)
        cell.SetCellValue(value)
        cell.CellStyle = cellStyle
    End Sub
    Private Sub CreateRow(ByRef row As HSSFRow, ByVal colId As Integer, 
                                                ByVal value As String, 
                                      ByVal cellStyle As HSSFCellStyle)
        Dim cell As HSSFCell = row.CreateCell(colId)
        cell.SetCellValue(value)
        cell.CellStyle = cellStyle
    End Sub
¿Fue útil?

Solución

Es difícil saber a partir de la sección de código lo que está haciendo, pero utilizando PropertyInfo es una bastante grande pista de que hay un poco de reflexión pasando (eso y el uso de GetValue).

Además, todo está canalizando a través valor que es del tipo de objeto, que es una especie del equivalente .NET de la antigua versión VB6.

Todo lo que encasillamiento va a costar.

En su lugar, si no había manera de conseguir la lista APOYOS en una especie de objetos que ya están escritas, por lo que podría evitar todos los isint, ISDATE, etc., llamadas y las llamadas GetValue, debería ver un aumento bastante decente en la velocidad .

Es donde me miraría primero.

Otros consejos

Aparte de "iterar sobre menos datos," no veo una solución sencilla aquí. La cantidad de trabajo que tiene que hacer escalas como registros (* fields_per_record); estás pasando pegado a través de su bucle interno ~ 162.000 veces dan los números que nos ha facilitado.

Comprar un procesador más rápido y añadir un poco más de memoria.

firstt es lo primero, su código es un desastre. La indentación no está clara y iRow se incrementa es si en un bucle cuando el interior de una For Each en los informes. Sospecho que está interactuando sobre los mismos datos una y otra vez.

En segundo lugar, en cada fila, se prueba una y otra vez qué tipos tienen las columnas. Ahora, ya props no está asignado a dentro de la lista, una optimización considerable sería eliminar pruebas IsInt y IsDate por el almacenamiento en caché de alguna manera lo que los tipos que tienen.

Además, si se puede asignar previamente todas las células de una sola fila antes de bucle sobre las propiedades, es posible obtener una buena ganancia en el rendimiento!

Sin embargo, como otros han señalado, no en esto va a cambiar la complejidad de su código. Siempre será O(number of rows * number of cells), lo que significa que se duplica la cantidad de datos, usted debe esperar para duplicar el tiempo de cálculo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top