FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Rutina que ocupa el 100% del procesador
Hola amigos
Estoy desarrollando un programa que lee un archivo de texto con un While. Incialmente mi aplicación se bloqueaba y no podía hacer nada, pero en otros hilos vi que podia usar Application.ProcessMessages para que el programa no se bloqueara, bueno pues ahora me he dado cuenta que el uso del procesador está al 100% ya que estoy leyendo linea por linea el archivo y guardo en una base de datos cierta información (cada archivo de texto contiene aproximadamente 20,000 lineas). ¿Hay alguna manera de liberar memoria del uso del procesador? Muchas gracias Salud OS. Edito: Uso Firebird 2.0, Windows XP y Turbo Delphi.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney Última edición por egostar fecha: 07-07-2007 a las 02:19:52. |
#2
|
||||
|
||||
La manera de reducir el uso de la CPU es no usándola
Y no bromeo, cuando tu estas en un bucle tu aplicación esta usando todo el tiempo de CPU que puede. Así que mientras no salgas del bucle el uso de la CPU siempre tiende a ser del 100%. La única solución es decirle a nuestra aplicación que se tome un respiro, esto inevitablemente provoca que el proceso sea mas lento pero bajara el uso de la CPU. Tu tendrás que valorar que es lo mas importante. Traducir esto a código es sencillo: Sleep detiene nuestro proceso y no lo deja continuar hasta que pasa el tiempo que le marcamos. Esto reducirá el tiempo que el proceso esta en ejecución y por lo tanto bajara el uso de la CPU. Aunque quizá te llegue con esto otro: Aquí Sleep comprueba si hay algún proceso, con la misma prioridad que el nuestro, que esta preparado para ejecutarse y le cede el puesto. Pero si no hay ninguno esperando, Sleep vuelve inmediatamente y nuestro proceso sigue ejecutándose. Así el proceso no se detiene sin necesidad y los demás procesos tienen un poco mas de tiempo. Como ves usar Sleep ralentiza el proceso, al igual que lo hace usar Application.ProcessMessages, así que eres tu quien tiene que valorar si es necesario usarlo o no. Si la rapidez es importante no lo uses, si lo importante es que el resto del equipo siga siendo "usable" mientras se lleva acabo el proceso usalo sin duda. |
#3
|
|||
|
|||
Gracias Seoane, pero sucede algo curioso, no tengo problema con los demas programas que este usando en la PC.
Sin embargo si me importa el tiempo ya que cada registro que agrego a la base de datos consume 2 o 3 segundos, pero si estamos hablando de 20,000 registros, aumentar el tiempo me parece dramático. Tendré que ver como le bajo al tiempo al agregar registros a la base. Salud OS y nmuchas gracias.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#4
|
||||
|
||||
Pues entonces nada, si no molesta al resto de programas que use toda la CPU que quiera
|
#5
|
||||
|
||||
¡Hola a todos!
Cita:
Aquello era para ADO, pero bien podría adaptarse a otro tipo de conexiones como las que tradicionalmente se usan con Firebird (IBX, dbExpress, etc.). Ya expiró el tiempo de "goce exclusivo", así que el código queda disponible para quien lo pueda necesitar (la empresa donde trabajo dispuso distribuir este componente bajo la línea GH, es decir, gratuito). El único problema es que está un poco empolvado y usa la versión vieja de GH Freebrary (antes Interfaz GH). Por ahora se considera un producto "en revisión", pero igual y les sirve a los interesados, cuando menos de referencia. Estoy en el correo de siempre. Un abrazo múltiple. Al González. |
#6
|
|||
|
|||
Muchas gracias Alberto, mas rápido que una bala estaré en contacto contigo.
Salud OS desde este rincón solitario en la Ciudad de los Palacios.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#7
|
||||
|
||||
Se ve interesante esa aplicacion, podrias indicarme donde conseguir el codigo?
|
#8
|
|||
|
|||
Bueno, solo actualizando este hilo, estuve haciendo pruebas y me encontré con la siguiente situación:
Inicialmente le tomaba a mi aplicación algo más de 4 horas procesar 10,000 registros. El detalle era que por cada registro actualizado abría y cerraba la conexión con la base de datos Me dije, si solo abro la base cuando comienzo el proceso y la cierro al terminar, pues bien lo hice y baje el tiempo a 2 horas y media Seguí buscando como estaba haciendo la inserción de registros y me encontré que por cada registro que agregaba, abria y cerraba la tabla Bueno, me pregunté, porque no quitar esas instrucciones y solo abro la tabla cuando inicio el proceso y la cierro cuando termina, ya habia funcionado con el asunto de la conectividad con la base de datos, no? Pues bien, ahora procesar 10,000 registros me ocupa de 6 a 7 minutos y el uso del procesador pues ya me viene valiendo dos cosas. Salud OS y gracias por las aportaciones a este hilo.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#9
|
||||
|
||||
Vaya, interesante anecdota. El Firebird utiliza conexion ADO, DAO o que?
|
#10
|
|||
|
|||
Cita:
no se si haya componentes mejores de utilizar..... Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#11
|
||||
|
||||
¡Hola a todos!
Así que ese era el detalle. De haberme fijado antes en la cantidad de registros que mencionas (10000), habría advertido que Firebird no podía ser tan lento. Y mira, si además empleas transacciones verás cómo se reduce muchísimo más el tiempo de espera. Cita:
De cualquier forma, los IBX son buenos, los usé en varias aplicaciones. Un abrazo rápido. Al González. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Rutina muy lenta... | KAYO | Firebird e Interbase | 10 | 04-07-2007 17:14:44 |
Simular Procesador | JuanPa1 | API de Windows | 2 | 19-06-2007 08:18:15 |
mi programa ocupa DEMASIADA memoria | unreal4u | Varios | 2 | 24-04-2005 04:42:05 |
El saber no ocupa lugar !!!!! | LucasArgentino | SQL | 2 | 13-11-2003 16:35:03 |
como repito la grupHeader de QReport cundo el texto del frupo ocupa mas de una pagina | orfeo | Impresión | 1 | 05-05-2003 09:48:46 |
|