Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/01/2007, 09:59
Avatar de SuperPinwi
SuperPinwi
 
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Liberar memoria??

la función que libera recursos la llamo al final de los 3 métodos que tengo que se repiten continuamente. cuando la CPU llega al 100%, pasa seguidamente un segundo a 3%, después otro al 20% o así más o menos y vuelve al 100% de nuevo. Además me sale, además de la típica línea verde que indica el historial de uso de CPU, otra línea roja en paralelo q no sé porqué sale.

Código:
Public Shared Sub EjecutaLeeBD2()
                While (banderaIniciar = True)
            Try
                'Se abre la conexión de la base de datos
                ObjCleeBD2.Open()
                'Se escogen los registros de la base de datos que se desean
                objAdapter2 = New OleDbDataAdapter("SELECT * FROM Propiedades ORDER BY ID", ObjCleeBD2)
                transaccion2 = ObjCleeBD2.BeginTransaction
                'Se asocia la conexión con el objeto acciones
                objAcciones.Transaction = transaccion2
                objAcciones.Connection = ObjCleeBD2
                objAdapter2.selectcommand.transaction = transaccion2
                'Se almacena la base de datos en el dataTable
                objAdapter2.Fill(dtBD2)
                'Se almacena en n el número de filas de la base de datos
                n = dtBD2.Rows.Count
                transaccion2.Commit()
            Catch ex As Exception
                transaccion2.Rollback()
            Finally
                'Cierra la conexión de la base de datos
                ObjCleeBD2.Close()
            End Try
            actualizaBD1()
            ClearMemory()
            objAdapter2.dispose()
            objAdapter2 = Nothing
            GC.Collect()
        End While
    End Sub

Public Shared Sub actualizaBD1()        
        ReadWriteLock.AcquireWriterLock(System.Threading.Timeout.Infinite)
        If File.Exists(ruta) Then
            Try
                ObjCactualizaBD1.Open()
                transaccion = ObjCactualizaBD1.BeginTransaction()
                objAdaptador2 = New OleDbDataAdapter("SELECT * FROM Propiedades ORDER BY ID", ObjCactualizaBD1)
                objAdaptador2.SelectCommand.Transaction = transaccion
                objAcciones1.Connection = ObjCactualizaBD1
                objAcciones1.Transaction = transaccion
                OleDbUpdateCommand1.Connection = ObjCactualizaBD1
                OleDbUpdateCommand1.Transaction = transaccion
                dtBD1 = New DataTable
                objAdaptador2.Fill(dtBD1)
                n = dtBD1.Rows.Count
                n2 = dtBD2.Rows.Count
                If n = 0 Then
                    MessageBox.Show("No se ha encontrado ningún registro que coincida con la selección", "Aviso")
                Else
                    While fila < n2
                        For Each dr In dtBD1.Rows
                            sID = dr("ID")
                            sDescripcion = dtBD2.Rows(fila)("descripcion").ToString
                            sValor = dtBD2.Rows(fila)("valor").ToString
                            sDescripcion = Chr(34) & sDescripcion & Chr(34)
                            sValor = Chr(34) & sValor & Chr(34)
                            OleDbUpdateCommand1.CommandText = "UPDATE Propiedades SET descripcion = " & sDescripcion & " WHERE ID = " & sID
                            OleDbUpdateCommand1.ExecuteNonQuery()
                            OleDbUpdateCommand1.CommandText = "UPDATE Propiedades SET valor = " & sValor & " WHERE ID = " & sID
                            OleDbUpdateCommand1.ExecuteNonQuery()
                            fila = fila + 1
                        Next
                    End While
                End If
                transaccion.Commit()
            Catch ex As Exception
                transaccion.Rollback()
                MessageBox.Show(Err.Description, "Aviso")
            Finally
                ObjCactualizaBD1.Close()
                ReadWriteLock.ReleaseWriterLock()
            End Try
            ClearMemory()
            objAdaptador2.Dispose()
            objAdaptador2 = Nothing
            dtBD1.Dispose()
            dtBD1 = Nothing
            EjecutaHiloBD()
            ThreadActualizaBD.sleep(6000)
            GC.Collect()
        Else
            MessageBox.Show("No hay una base de datos cargada en este momento, por favor cargue una y vuelva a intentarlo", "Aviso")
        End If
    End Sub


Public Shared Sub EjecutaHiloBD()
                Try
            'Se abre la conexión de la base de datos
            objConn.Open()
            'Se escogen los registros de la base de datos que se desean
            objAdapter = New OleDbDataAdapter("SELECT * FROM Propiedades ORDER BY ID", objConn)
            transaccion3 = objConn.BeginTransaction
            objAcciones.Transaction = transaccion3
            objAdapter.selectcommand.transaction = transaccion3
            'Se almacena la base de datos en el dataTable
            objAdapter.Fill(dt)
            'Se almacena en n el número de filas de la base de datos
            n = dt.Rows.Count
            'Se asocia la conexión con el objeto acciones
            objAcciones.Connection = objConn
            If n = 0 Then
                MessageBox.Show("No se ha encontrado ningún registro que coincida con la selección")
            Else
                'Recorre las filas en el dataTable y las va asignando a las etiquetas
                'del formulario principal para que se muestren
                For fila = 0 To n - 1
                    'Asignar a las variables el contenido del registro
                    sValor = dt.Rows(fila)("valor").ToString
                    sDescripcion = dt.Rows(fila)("descripcion").ToString
                    sVisibilidadLabel = dt.Rows(fila)("visibilidadlabel").ToString
                    sVisibilidadTA = dt.Rows(fila)("visibilidadta").ToString
                    sID = dt.Rows(fila)("ID").ToString
                    'Muestra u oculta los campos según cual sea su valor en la base de datos
                    If sVisibilidadLabel = True Then
                        etiquetas(i).Text = sDescripcion
                        etiquetas(i).Visible() = True
                    Else
                        etiquetas(i).Visible() = False
                    End If
                    If sVisibilidadTA = True Then
                        camposTexto(i).Text = sValor
                        camposTexto(i).Visible() = True
                        'Hacer que los campos que en la base de datos tengan el valor
                        'visible a false, se oculten en el formulario                    
                    Else
                        camposTexto(i).Visible() = False
                    End If
                    i = i + 1
                Next
            End If
            transaccion3.Commit()
        Catch ex As Exception
            MessageBox.Show(Err.Description & Err.Source, "Información del sistema")
            transaccion3.Rollback()
        Finally
            'Cierra la conexión de la base de datos
            objConn.Close()
        End Try
        'Limpiar la memoria
        ClearMemory()
        'Ponemos a nulos los objetos para que los recoja el garbage collector
        Dim bucle As Integer
        objAdapter.dispose()
        objAdapter = Nothing
        GC.Collect()
    End Sub