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