Duda: ¿que sería más eficiente?

Started by Danielo515, July 21, 2009, 09:31:19 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Tengo una duda sobre la eficiencia, sobre todo versus la funcionalidad.

En un principio tenía dos procesos, un proceso que recorría una lista de archivos y le pasaba a un segundo proceso cada par de archivos para que los comparase y me imagino que el mientras seguía a su rollo llamando a otros procesos de este tipo. Este segundo proceso hacia la comparación de ambos archivos, y si eran iguales avisaba y punto. Hasta ahí supongo que daba igual un proceso que dos ya que el segundo no tenía frame y se ejecutava hasta el final, momento en el que devolvía a su padre el poder, el domino o como lo querais llamar, el caso es que era lo mismo un proceso que dos, ya que nunca había más de un proceso del mismo tipo.

El problema vino cuando en el segundo proceso puse un frame, ya que quería visualizar el archivo en pantalla. ¿cual era el problema? pues que solo se visualizava el último archivo, como si el único que hiciera un frame fuera el último proceso, y no, es mentira, cada proceso comparador entraba en un bucle con frame hasta que se pulsara una tecla, pero el caso es que solo se veía el último archivo.

Por eso decidí probar a meter los dos procesos en uno, es decir, el mismo que va recorriendo la lista es el que se encarga de comparar los archivos y mostrarlos en pantalla si hace falta. El caso es que así funciona perfectamente, por lo que deduzco que el problema anterior es que de algún modo se pisaban los procesos que querían mostrar el archivo. La duda que tengo ¿será este método más lento al haber un solo proceso haciendo todo el trabajo o dará igual?

¿que opinais? ¿que haríais? que hago?

un saludo

kim-elet-o

si la lista es grande es mejor tener un proceso que haga el trabajo de los dos, ya que cuando se lanza un proceso hay una pequeña perdida de tiempo, debido a que la creacion de un proceso, implica tambien la creacion de sus variables locales y luego su destruccion, esto consume tiempo y si se repite muchas veces, el tiempo total necesitado para encontrar dos ficheros iguales sera grande, los bucles de busqueda o comparacion de datos, son bucles que deben estar lo maximo de optimizados, ya que son grandes consumidores de tiempos.
|/
|\im-elet-o el yayo programador.

Danielo515

Gracias kim. En efecto la lista suele ser grande, puede no serlo, pero en la mayoría de los casos lo será. De todos modos ya lo he integrado tod en una sola función y no parece tan fea como pensaba, así que seguramente se quede así.

Por cierto, ¿las imágenes siempre hay que descargarlas no?, vamos, que no se desargan solas, las cargue quien las cargue. Estoy harto de preguntar lo mismo, no se por que lo pregunto tanto, pero bueno, esta será la última vez. Un saludo.

kim-elet-o

Hay que descargarlas por un hecho muy simple, si no se descargan estas quedan en memoria, y si vas cargando y no descargas llegas un momento que te quedas sin memoria, por que aunque tengamos mucha memoria, la memoria es finita, y llega un momento en que se acaba, incluso es mas, me parece que bennu no descarga recursos cuando los programas finalizan, digamos que no es asunto suyo el ocuparse de "limpiar la memoria", que el programador "ensucia", por eso una practica sana es descargar todos los recursos justo antes de finalizar un programa, y hay una bonito "estamento" a usar en estos casos, llamado Onexit.

http://wiki.bennugd.org/index.php?title=Onexit

|/
|\im-elet-o el yayo programador.

DCelso

En teoría, el sistema operativo crea un espacio reservado de memoria al ejecutar un proceso y libera la memoria después de finalizar la ejecución de éste si todo fué bien. Si no recuerdo mal ni msdos ni windows95/98 lo hacían y existían problemas de pérdida de memoria. Hoy en día no debería de haber problemas, salvo en sistemas operativos raros como los de algunas consolas :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

splinter_work

como bien dice DCelso, al finalizar bennu la memoria se limpia solita... el sistema operativo lo hace... (salvo excepciones como ser memoria compartida, y alguna otra cosa mas... pero no es el caso de bennu...)

kim-elet-o

Ok tomo nota, como soy de la vieja escuela, estoy acostumbrado hacer las cosas que no hacian los viejos sistemas operativos, pero de todas formas, es una buena practica limpiar la memoria cuando has acabado de usarla, es algo asi como al terminar de trabajar o de hacer un trabajo, limpiar tu sitio de trabajo es una buena practica.

|/
|\im-elet-o el yayo programador.

splinter_work

Quote from: kim-elet-o on July 23, 2009, 08:03:21 AM
...es algo asi como al terminar de trabajar o de hacer un trabajo, limpiar tu sitio de trabajo es una buena practica.

limpiar despues de trabajar??? que es eso??? Ahi si no te creo nada... :D

DCelso

estoy contigo kimeleto, simplemente lo puse para describir lo que pasa en la realidad no para que se programe a posta mal :D.
Aunque también he de reconocer lo que dice splinterGU, ¿limpiar que?  :D ;D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/