Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Unhappy CPU al 100%

Hola tengo un problema, y espero que como suele pasar vengan a mi rescate... tengo una aplicacion en delphi, que funciona correctamente (en apariencia), cuando ejecuto mi aplicacion corre bien y sin errores, pero he notado que al dejarlo un rato abierto "secuestra mi CPU", al mirar el administrador de tareas mi CPU esta al 100% sin que mi aplicacion haga nada (y el administrador de tareas me indica que es mi aplicacion), no he podido identificar algo raro y mi programa no tiene timers ni nada parecido... ojala me puedan aydar... Saludos!
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #2  
Antiguo 21-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veamos... ¡¡¡ bolita mágica, tú que lo sabes todo, dime qué le pasa al programa de erickahr !!!


Nada, no contesta


Bromas aparte, qué tal si nos dices qué hace tu programa, qué procesos, bases de datos, componentes de acceso, otros componentes varios, etc, etc, etc.....
Responder Con Cita
  #3  
Antiguo 21-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Sip antes que nada GRACIAS por responder tan pronto... mira mi aplicacion es un punto de venta comun y corriente, he corrido una version anterior de este y no me ha hecho lo mismo, pero el problema es que desde esa version he realizadovarios cambios... como son un modulo para toma de inventarios que consta aproximadamente de 4 formularios, y tengo un formulario con un richedit que nunca muestro ya que lo ocupo para la impresion de tickets en una impresora termica. efectivamente hay muchos procesos que dependen de la base de datos, Uso firebird 2.1 y cuantum grid, y varios componentes.... lo raro es que la mayoria de los formularios que agregue son heredados de los que ya existian y que no me daban este problema.
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #4  
Antiguo 21-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que vas a tener que ir quitando un componente... y probando. Si va igual, entonces, quitas otro y pruebas... y así hasta que lo descubras.

Dos veces me ha pasado lo que comentas, una vez fue un simple componente que capturaba la tecla 'tab' y la convertía en 'intro', si quitaba el componente funcionaba perfecto el programa, pero si ponía el componente entonces la cpu al 100%... y eso que ese mismo componente lo usaba en otros programas.
La otra vez me pasó con un componente 'trayicon', de los que minimizan el programa dejando el icono junto al reloj. Tuve que buscarme otro que no me diera ese problema.
Responder Con Cita
  #5  
Antiguo 21-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Ok lo checo y te comento como va, salu2 y Gracias nuevamente.
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #6  
Antiguo 22-04-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Tu programa tiene Timers o Threads? ¿Puede ser que se te esté quedando alguno acivo?

¿Algun bucle que realice operaciones periódicas en Base de datos?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 22-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Hola Neftalí, gracias por la respuesta.

Pues te comento que en los formularios que he modificado, realizo varias operaciones con la BD, hago algunos JOIN con varias tablas, manejo una tabla temporal con un MemData, trabajo con firebird y según entiendo al hacer un commit se afectan los cambios en la base de datos y todo, no obstante tengo una pequeña funcion que se encarga de cerrar todos los componentes que tiene que ver con la BD, no se si es la mejor forma, pero aki lo pongo (ademas igual y le sirve a alguien mas).

Código Delphi [-]
procedure TfrTomaInv.CierraQueries;
var
  I: Integer;
begin
  for I:=0 to ComponentCount-1 do
    begin
    if (Components[i] is TIBTransaction) and (TIBTransaction(Components[i]).InTransaction) then
      TIBTransaction(Components[i]).Commit;
    if (Components[i] is TIBQuery) then
      TIBQuery(Components[i]).Close;
    if (Components[i] is TIBStoredProc) then
      TIBStoredProc(Components[i]).Close;
    if (Components[i] is TIBDataSet) then
      TIBDataSet(Components[i]).Close;
    if (Components[i] is TdxMemData) then
      TdxMemData(Components[i]).Close;
    end;
end;

La mayoria de mis formularios se crean al llamarlos ya que mi aplicacion es MDI, solo tengo un formulario con una grilla de detalle (que es llamado con doble clic desde una cuadricula que muestra la tabla maestro), y uno que nunca visualizo, lo utilizo para llenar un richedit, para imprimir un ticket (cosa con la que por cierto me ayudaste Neftalí ), y claro un modulo de datos que uso para la conexion.

Y GRACIAS por el interes en ayudar, a ver si con esto me encuentras algún fallo. Salu2
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #8  
Antiguo 22-04-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, lo que dices puede o no tener errores (el código que has puesto no lo parece), lo que me intriga es que aunque los tuviera, el efecto que provocararía no es el que comentas.

De ahí que te comentara lo de los threads, timers o bucles, porque es lo que se me ocurre que podría provocar ese efecto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 22-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Yo estaba con la creencia de que era a partir de los cambios que te comentaba, pero la cuestion es que desde la mañana he estado haciendo pruebas con una version anterior y me he percatado que hace exactamente lo mismo, aun si solo lo abro y lo minimizo, despues de un rato se bota mi CPU, no tengo ni idea que sucede y es ahora mas complejo pq es no me limitaria a checar 6 o 7 forms, sino tengo que checar todo el sistema... a ver que sale.. alguna idea?
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #10  
Antiguo 23-04-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Poder: 17
DriverOp Va por buen camino
No tengo la solución a tu problema (ojalá la tuviera) pero sí puedo darte otra pista de dónde buscar. Si estás seguro que en tu código no hay nada raro que provoque el comportamiento (bucles infinitos, threads colgados, etc...) puedes ir mirando las .dll que usa tu programa. Aunque no las uses explícitamente algunos componentes (como el TListView) usan DLL de Windows. También la conexión a la base de datos podría estar usando una o varias DLLs, si alguna es la culpable, el Administrador de Tareas de Windows te reportará que es tu aplicación la que hace el consumo aunque en realidad sea el código de alguna DLL.
Hay herramientas externas que te ayudan a identificar todas las DLLs que un programa está usando, por ejemplo el PrcView
Responder Con Cita
  #11  
Antiguo 23-04-2010
mcs mcs is offline
Miembro
 
Registrado: may 2007
Ubicación: Girona
Posts: 229
Poder: 18
mcs Va por buen camino
Tambien puedes usar un profiler, como el GPProfile o el ProDelphi. Los puedes descargar gratuitamente, ejecutas la aplicación desde estes programas (leete bien las instrucciones, antes), y tendrás un resumen indicando que funciones son las que gastan más CPU, memoria, cuantas veces se llama cada función, etc...
Responder Con Cita
  #12  
Antiguo 23-04-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Otra cuestión que te puede estar cargando la cpu, es si tu programa usa conecciones a internet, o sockets, si no los controlas adecuadamente, pueden estar consumiendo continuamente recursos, aunque opino lo mismo que neftali, creo que el problema más tipico es un timer, con proceso continuo, si usas timer, prueba a aumenta el interval, con lo cual se producira el mismo efecto pero tardara mas tiempo, o controla el active cuando lo necesites y desactivarlo cuando no.
Por último, cual es tu gestión de ventanas, liberas la ventana si es así te encargas de liberar la memoria de componentes usadas que lo necesite, usas algun proceso de seguimiento continuo, como vez hay muchos procesos, que te pueden estar consumiendo, memoria y procesador.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #13  
Antiguo 23-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Thumbs up Gracias.

Muchas gracias por toda su colaboracion, DriverOp y mcs, en este momento me pongo a checar las herramientas que me comentan muchas gracias por su ayuda, lo checo y les comento (a todo foro) como me va.

José Luis Garcí gracias al igual que a todos los compañeros del foro, te comento, mi aplicacion no usa ni un solo timer, hilos no tengo, y en cuestion de las ventanas child me he asegurado de liberarlas correctamente cada que se cierran, y lo raro es que tengo otra pequeña aplicacion donde si uso hasta dos timers, un hilo y eventos de aplicacion con mensajes de windows, y no me bota el micro como la aplicacion que comento, pero igual gracias nuevamente a ti y a todos, me comprometo a poner la solucion aki (si logro solucionalo jaja) para quien tenga un problema similar.

Saludos y aki seguimos!
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #14  
Antiguo 24-04-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Al igual que los otros compañeros, estamos para echar una mano si podemos y que no sea al cuello , ahora al tema, usas componentes de terceros, porque estos pueden usar timers que tu no controlas, para comprobarlos, si tienes el fuente, revisa lo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #15  
Antiguo 31-05-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Gracias

Despues de chequear todos y cada un o de los formularios encontre el ptoblema, era un componente encargado de hacer un ping, este componente fue creado por un compañero, tenia un timer incluido, aprecio mucho su pronta respuesta y gracias por todo y a todos, ha quedado resuelto.

Otra vez, Gracias.
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:16:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi