Foros del Web » Programación para mayores de 30 ;) » .NET »

Consumo de recursos de procesador

Estas en el tema de Consumo de recursos de procesador en el foro de .NET en Foros del Web. Hola, tengo una aplicación con un Form que contiene un par de TabPages dentro de un TabControl con dos RichTextBox a los cuales escribo a ...
  #1 (permalink)  
Antiguo 10/10/2012, 06:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 8 años, 5 meses
Puntos: 0
Pregunta Consumo de recursos de procesador

Hola, tengo una aplicación con un Form que contiene un par de TabPages dentro de un TabControl con dos RichTextBox a los cuales escribo a través de delegados; también tengo 3 Timers, uno cada 10 segundos y los otros dos cada 1 segundo, y por ultimo un control SerialPort a 19200bps y una conexión a un servidor MySQL.

Todo lo antes mencionado me esta consumiendo alrededor de 50MB de RAM, esto no lo veo mal, lo que si me sorprende es que consuma el 50% de los recurso del procesador (Pentium Dual Core E5300).

Mi pregunta es, ¿Hay alguna forma de saber que parte del programa es la que esta consumiendo tantos recursos del procesador?¿Que practicas se pueden implementar para reducir el consumo de procesador?

Edito:

Al parecer ocurre luego de un par de horas de funcionamiento, empiezo a sospechar que los RichTextBox, al llenarse, hacen que la aplicación consuma mas recursos.

El código que estoy usando en lo delegados es el siguiente:

Código vb:
Ver original
  1. Private Sub PrintLog(ByVal NewText As String, Optional ByVal NewLine As Boolean = True)
  2.  
  3.         If Me.InvokeRequired Then
  4.             Dim Txt As New PrintLogDelegate(AddressOf PrintLog)
  5.             Me.Invoke(Txt, New Object() {NewText})
  6.  
  7.         Else
  8.             Dim FechaHora As String = ""
  9.             'If NewLine And LogRTB.TextLength > 1 Then 'Evita que se agregue un /r/n a la primera linea
  10.            If NewLine Then
  11.                 FechaHora = GetFechaHora() & " | "
  12.                 If LogRTB.TextLength > 1 Then
  13.                     NewText = vbCrLf & FechaHora & NewText
  14.                 Else
  15.                     NewText = FechaHora & NewText
  16.                 End If
  17.             End If
  18.             LogRTB.AppendText(NewText)
  19.  
  20.  
  21.             LogRTB.SaveFile(LogPath & ".log", RichTextBoxStreamType.PlainText)
  22.             If LogRTB.TextLength > 1000000 Then
  23.                 LogRTB.Clear()
  24.                 'Si supera el millon de caracteres renovar el nombre del archivo para que quede listo para el proximo
  25.                LogPath = Application.StartupPath & "\" & GetFechaHora().Replace(":", "")
  26.             End If
  27.  
  28.             If LogAutoScrollChk.Checked Then
  29.                 LogRTB.ScrollToCaret()
  30.             End If
  31.         End If
  32.     End Sub

¿Ustedes lo ven muy pesado?

Última edición por E_Blue; 10/10/2012 a las 07:31
  #2 (permalink)  
Antiguo 10/10/2012, 09:57
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 11 años, 4 meses
Puntos: 220
Respuesta: Consumo de recursos de procesador

Ahora mi consulta es lo siguiente para que son tantos timer??? y cual es el objetivo final de llenar los RichTextBox.

Primero seria bueno que explicaras cual es el objetivo que estas haciendo y para que lo haces

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 10/10/2012, 11:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consumo de recursos de procesador

Bueno, empecemos por lo mas sencillo de explicar, los RichTextBox son para guardar logs, uno guarda los errores y acciones que va realizando el programa y el otro guarda los datos que entran y salen del puerto serie, todo esto llamando a su correspondiente delegado.

Luego, un Timer tengo para que envíe los comandos por el puerto serie cada 5 segundos y cada 1 chequea si hay conexión con el dispositivo conectado al puerto, el cual es un módem inalambrico.

El segundo Timer se complementa con el primero y su función es contabilizar el tiempo que transcurre entre que se envía el comando al módem y este contesta; de esta forma puedo generar un timeout.

El tercer Timer verifica que los dos primeros funcionen correctamente pues cuando se entra a la función del primer Timer, este se autodeshabilita y depende por donde salga se vuelve a habilitar solo o no.

El cuarto Timer verifica cada 10 segundos que la función que actualiza el DatagridView este habilitada pues no se debe deshabilitar por mas de 30 segundos.(El usuario puede deshabilitar la actualización mediante un CheckBox).
  #4 (permalink)  
Antiguo 10/10/2012, 11:47
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 9 años, 3 meses
Puntos: 267
Respuesta: Consumo de recursos de procesador

Mmmm me parece que estas abusando de los timers... Creo que 1 bastaría.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #5 (permalink)  
Antiguo 10/10/2012, 11:57
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 11 años, 4 meses
Puntos: 220
Respuesta: Consumo de recursos de procesador

Cita:
Iniciado por Aquaventus Ver Mensaje
Mmmm me parece que estas abusando de los timers... Creo que 1 bastaría.
Apoyo con lo que dice Aquaventus muchos timer para hacer esto ademas seria mucho mas conveniente que si usas Thread y trabajar en varios procesadores,
ademas porque mostrar los logs en el richtebox si lo puedes estar guardando en un text sin necesidad de mostrarlo

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #6 (permalink)  
Antiguo 10/10/2012, 14:10
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consumo de recursos de procesador

Los RichTextBox me sirven a mi como referencia para saber como fue la cadena de eventos que llevo al error; me ha pasado que si el programa ejecuta las rutinas en orden A B C todo funciona bien, pero si las llama en orden B C A y no funciona.

Ahora tengo limitados los RichTextBox a 100KB, cuando llega a ese punto los borro e inicio un nuevo archivo.

Lo raro es que de entrada funciona bien, parece ser algo acumulativo, arranca en 36MB y a las 3 horas esta rondando los 50MB.
Ademas tengo otra aplicación, complementaria con esta que es la que ve el usuario final que también tiene el mismo tipo de log, maneja la misma base de datos con querys mas complejas, pero no maneja puerto serie y funciona perfectamente.

Es desconcertante.

Edito:

Mirando el administrador de tareas me he dado cuenta de que si minimizo la aplicación el consumo de RAM baja de 36MB a 1MB y luego de un par de segundos sube a 7MB y se estabiliza en torno a los 10MB.

Me parece que el problema es algún componente gráfico de .NET.

Ademas si en vez de enviar comandos al módem cada 1 segundo lo hago cada 3 segundos el consumo del procesador sube solo cuando procesa los datos enviados por el módem.

Última edición por E_Blue; 10/10/2012 a las 14:23

Etiquetas: consumo, procesador, recursos, sql, textbox
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:09.