PDA

Ver la Versión Completa : Programa congelado debido a la carga


rabata2001
21-11-2013, 09:03:10
Buenas a todos,

Tengo un PC (Windows XP) dónde estoy ejecutando tres aplicaciones a la vez y me es necesario así porque ese PC saca información a pantallas al exterior con una tarjeta gráfica de 4 salidas (salida a TV).

El primero proceso y el más costoso realiza un proceso que tarda más o menos 1,5 segundos y deja congelado al pc mientras se ejecuta y esto ocurre cada 4 segundos.

El segundo sistema es más pequeño y es rápido en su ejecución (casi no le afecta)

El tercer sistema es rápido en su ejecución pero es el que más molesta en su visualización se trata de un reloj y una cuenta atrás (Timer cada segundo), debido al efecto del primer programa a veces se salta segundos (se congela). Por ejemplo en el reloj se observa: 10:15:23, 10:15:24, 10:15:26 (no llega a verse pintado la 10:15:25).

He probado usando la afinidad de CPU's al ser un sistema de doble núcleo con windows XP. Lo conveniente sería que una CPU se ocupase de los dos primeras aplicaciones y otra CPU se ocupase del tercer sistema (Visualización del reloj) para evitar la congelación.

¿Alguien se ha encontrado con algo similar?. ¿Alguien ha soluciona esto?. ¿Algún sistema que lo resuelva o través de configuración?.

Gracias a todos por vuestra colaboración.

olbeup
21-11-2013, 09:07:21
Hola rabata2001,

Lo único que puedes hacer es que lo realices con hilos, puede ser la solución a tu problema.

Un saludo.

Neftali [Germán.Estévez]
21-11-2013, 10:38:04
Lo único que puedes hacer es que lo realices con hilos, puede ser la solución a tu problema.


Utilizar diferentes hilos en el mismo programa podría solventar el problemas si los tres procesos se hicieran desde la misma aplicación, pero tal y como explica rabata2001, se trata de tres aplicaciones distintas corriendo en el mismo sistema, por lo tanto,por definición ya funcionan en tres hilos distintos.

Rabata2001, dices que has probado lo de asignar afinidad a los procesadores . ¿Has comprobado que se asigna bien? ¿Has usado imagecfg u otro programa?
Si es así y el problema sigue estando, es posible que no sea problema del procesador, sino de otra cosa.

Asumo que el proceso que te provoca "la parada" en el sistema es el primero.
¿Si lo paras, los otros funcionan bien?

Si ya tienes claro que el problema está en ese proceso, habrá que centrarse en él, para solventarlo.
¿Exactamente qué hece ese proceso que bloquea?

rabata2001
21-11-2013, 13:29:38
buenas tardes y gracias por vuestro comentarios


dices que has probado lo de asignar afinidad a los procesadores . ¿Has comprobado que se asigna bien? ¿Has usado imagecfg u otro programa?


No conozco ese sistema que me indicas imagecfg, intentaré descargarlo y probarlo. La asignación la hago desde el mismo panel de procesos de windows XP (afinidad y prioridad)


Asumo que el proceso que te provoca "la parada" en el sistema es el primero.
¿Si lo paras, los otros funcionan bien?


Si, al parar el sistema primero, todo se visualiza correctamente


Si ya tienes claro que el problema está en ese proceso, habrá que centrarse en él, para solventarlo.
¿Exactamente qué hece ese proceso que bloquea?


El primero muestra una clasificación de resultados que se realiza cada 5 segundos y el proceso tarda en completarse en el peor de los casos entre 1 y 2 segundos (a veces tarda mucho menos). El proceso realiza consultas a la base de datos para obtener la información (bbdd está en otro servidor, Interbase 7 windows server 2003 32bits) y una vez que calcula los datos los pinta en varios StringGrid, estos a su vez formatea colores y textos según los datos proporcionados. El proceso es largo y tedioso, pero debería consumir todas las cpu's, sino simplemente la asignada.

Saludos.

Neftali [Germán.Estévez]
21-11-2013, 13:49:54
No conozco ese sistema que me indicas imagecfg, intentaré descargarlo y probarlo. La asignación la hago desde el mismo panel de procesos de windows XP (afinidad y prioridad)


Es un programa que sirve para hacerlo de forma programática. Pero si lo has hecho desde el Administrador, deberia ser lo mismo.



Si, al parar el sistema primero, todo se visualiza correctamente


Entonces ya es seguro que es por el primer sistema y que no es por el procesador, sino por alguna otra causa.



El primero muestra una clasificación de resultados que se realiza cada 5 segundos y el proceso tarda en completarse en el peor de los casos entre 1 y 2 segundos (a veces tarda mucho menos). El proceso realiza consultas a la base de datos para obtener la información (bbdd está en otro servidor, Interbase 7 windows server 2003 32bits) y una vez que calcula los datos los pinta en varios StringGrid, estos a su vez formatea colores y textos según los datos proporcionados. El proceso es largo y tedioso, pero debería consumir todas las cpu's, sino simplemente la asignada.


Eso me parece lo lógico.
Deberías poder comprobar eso mirando el gráfico de procesadores. En ese caso sólo 1 debería estar al máximo.
No tiene sentido que se te bloquee TODO el equipo.

duilioisola
22-11-2013, 12:44:28
¿Has probado a subir o bajar la prioridad de los procesos?

En el Administrador de procesos, seleccionas el proceso y con botón derecho haces click. Luego vas a "establecer prioridad" y eliges alguna.
Prueba a subir la del primero y bajar la de los otros dos y también la contraria, bajar la prioridad del primer proceso y subir la de los otros dos.

duilioisola
22-11-2013, 12:49:49
¿El primer proceso lo has hecho tu?
Si es así, quizás podrías hacer que devuelva el control después de cada parte que ejecuta:

begin
PreguntarBaseDeDatos;
Application.ProcessMessages;

for i := 1 to CantidadFilas do
begin
PintarFila(i);
Application.ProcessMessages;
end;
end;


o


begin
PreguntarBaseDeDatos;
Sleep(100);

for i := 1 to CantidadFilas do
begin
PintarFila(i);
Sleep(100);
end;
end;

nlsgarcia
22-11-2013, 17:12:17
rabata2001,


...Tengo un PC (Windows XP) dónde estoy ejecutando tres aplicaciones a la vez...

...El primero proceso...tarda más o menos 1,5 segundos y deja congelado al PC mientras se ejecuta...cada 4 segundos...

...El segundo sistema...es rápido en su ejecución...

...El tercer sistema...es el que más molesta...se trata de un reloj...debido al efecto del primer programa a veces se salta segundos (se congela)...

...El primero muestra una clasificación de resultados...realiza consultas a la base de datos para obtener la información (bbdd está en otro servidor, Interbase 7 Windows Server 2003 32 Bits) y una vez que calcula los datos los pinta en varios StringGrid, estos a su vez formatea colores y textos según los datos proporcionados...


Te comento:

1- Si el primer proceso se ejecuta en 1.5 seg en promedio y este se ejecuta cada 4 seg aproximadamente, esto implica que en un minuto el PC estará bloqueado 22.5 seg (60 seg / 4 seg * 1.5 seg), según la descripción del problema, luego en una hora el PC estará bloqueado 22.5 minutos en promedio.

2- ¿Has considerado utilizar hilos en el primer proceso como se sugirió en el Msg #2?, el proceso en si bloquea el PC, si este es dividido en hilos esto mejorara el rendimiento de dicho proceso, en el menor de los casos usar la instrucción Application.ProcessMessages como se sugirió en el Msg #7, aunque en este caso es aconsejable incluir programación por hilos en el primer proceso en función de la descripción del problema.

Pregunto:

1- ¿Cuales son las especificaciones técnicas del PC que ejecuta los procesos a nivel de Hardware y Software (CPU, RAM, Hard Disk, Motherboard, Tarjeta Gráfica y SO)?.

2- ¿Tienes acceso al código fuente de los programas?.

3- ¿Haz considerado optimizar el algoritmo de clasificación de resultados del primer proceso?.

4- ¿Que otros procesos se ejecutan en el PC, que puedan afectar el performance de los procesos en cuestión (Antivirus, Servicios, Utilitarios, Aplicaciones, etc?.

5- En el caso de que la PC en cuestión tenga un bajo nivel de prestaciones, ¿Haz considerado hacer un upgrade de la misma?.

6- ¿Existe la posibilidad de probar las aplicaciones en cuestión en otra máquina para contrastar su performance con el PC original?.

La decisión de un cambio de hardware o una actualización de los procesos dependerá del nivel de criticidad de las aplicaciones, los recursos disponibles y los análisis realizados en función de todo lo comentado.

Espero sea útil :)

Nelson.

mamcx
22-11-2013, 18:17:06
No sirve con solo saber cual es el programa. Hay que saber cual es el codigo, exacto, que provoca el bloqueo. Muéstranos eso y vemos que se puede hacer.

rabata2001
26-11-2013, 09:33:07
Muchas Gracias a todos.

Ya he conseguido desbloquear. existían dos problemas:

El primer Problema.- se solucionó haciendo mas eficiente el segundo programa, aunque era pequeño, pero también consumía recursos (cada seg.)

El segundo problema.- También solucionado. Estoy usando en el programa más costoso, los alpha skins, este proceso saca del mismo PC 5 pantallas a TV, se consumen muchos recursos al utilizar los skins y bloqueaba también el pc, ha sido deshabilitar el skins y va muchísimo mejor.

El sistema donde se ejecuta al ser windows xp no sé si asocia correctamente afinidad y prioridad.

Gracias nuevamente a todos por vuestros consejos. De todas formas aplicaré mejoras de rendimiento, os tendré al tanto.

nlsgarcia
26-11-2013, 14:48:36
rabata2001,


...Ya he conseguido desbloquear...se solucionó haciendo mas eficiente el segundo programa...en el programa más costoso...ha sido deshabilitar los alpha skins y va muchísimo mejor...

^\||/


...al ser Windows XP no sé si asocia correctamente afinidad y prioridad...

Te sugiero que evalúes la posibilidad de sustituir Windows XP por Windows 7 Professional x32 o x64, el performance de ejecución aumenta considerablemente.

Espero sea útil :)

Nelson.

rabata2001
10-12-2013, 16:05:24
Estoy pensando no sólo en windows 7 sino pasarme directamente a Windows 8, para ver el rendimiento de todas las aplicaciones del sistema