Spanish Consumo excesivo de memoria?

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola a todos.

Hice una aplicación cuya tarea es recibir información y almacenarla en una base de datos sqlite. La aplicación funciona "correctamente" pero de un momento a otro se detiene.

Como tiene un servicio, al ejecutarse de nuevo el servicio la aplicación vuelve a trabajar automáticamente, pero los datos se truncan y ya no me sirven. He ejecutado la aplicación paso a paso en modo debug, pero como el fallo se puede presentar mas de una hora después de iniciar su ejecución, me es imposible ejecutar paso a paso tantos ciclos para encontrar el error. He utilizado Logs, etc pero no doy con el error.

Algo que me causa curiosidad es, si al finalizar una función, la memoria consumida por la misma se libera. Tengo entendido que eso lo hace android en el momento que él lo cree necesario.

El trabajo del programa es mas o menos así: Cada vez que el programa recibe los datos crea variables para almacenar la información recibida, las variables se almacenan en una lista, la cual se ordena, se extrae el dato que requiero, se guarda en la base de datos y finaliza la función, la cual se ejecuta de nuevo unos segundos después para repetir el proceso. La cantidad máxima de ciclos realizados de forma correcta es de unos 500, a veces menos.

Esta es la función que recibe la información. la almacena en variables y extrae el dato requerido.
B4X:
private Sub jobDone (job As HttpJob)
    Try
        If (job.Success) Then
            If (job.JobName == "GetOrderBook") Then
                Dim parser As JSONParser
                parser.Initialize(job.GetString)
                Dim root As Map = parser.NextObject
                Dim result As List = root.Get("result")
             
                'Creo la lista aqui para que al finalizar la funcion, la memoria se libere.
                Dim ListOrden As List             
             
                'Inicializo la lista
                ListOrden.Initialize
             
                For Each colresult As Map In result
                    Dim Rate As Double = function.Str2double(colresult.Get("Rate"))
                    Dim Quantity As Double = function.Str2double(colresult.Get("Quantity"))
                 
                    'Creo las variables aqui
                    Dim Orden As orden
                    Orden.Initialize                     
                    Orden.Rate = Rate
                    Orden.Quantity = Quantity
                     
                    'Guardo la variable en la lista
                    ListOrden.Add(Orden)
                Next
             
                'Ordeno la lista segun requiera
             
                'Ordenar
                If (M_Type == "buy") Then
                    ListOrden.SortType("Rate", False)
                End If
             
                'Ordenar
                If (M_Type == "sell") Then
                    ListOrden.SortType("Rate", True)
                End If
             
                'Me intereza solo el primer elemento de la lista.
                'Pero como es un objeto de tipo 'orden' lo guardo en la ultima variable 'orden'
                'Ya no importa su contenido
                Orden = ListOrden.get(0)
             
                'Si no han habido problemas, guardamos el dato requerido en un variable,
                If M_IsActive Then
                    M_Now = Orden.Rate
                End If             
             
                'Dim success As String = root.Get("success")
                'Dim message As String = root.Get("message")
            End If
        End If
     
        'Si no hay problemas se puede recibir nueva información
        M_IsActive = True
    Catch
        Log(LastException)
        ToastMessageShow("Orderbook.jobDone" & M_MarketName & LastException, True)
     
        'Si hay problemas. No se almacena nueva información
        M_IsActive = False
    End Try
End Sub

¿El quiebre del programa será porque que no se eliminan las variables creadas después de usarlas y finalizar la función?

Adjunto el archivo que contiene el proyecto.
 

Attachments

  • SaveData.zip
    14.3 KB · Views: 264
Last edited:
Top