elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Windows reduce velocidad de ejecucion.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Windows reduce velocidad de ejecucion.  (Leído 14,330 veces)
Danielㅤ


Desconectado Desconectado

Mensajes: 1.825


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Windows reduce velocidad de ejecucion.
« Respuesta #20 en: 21 Octubre 2021, 23:11 pm »

Hola, tal vez usando Virtual List mejores la velocidad de carga:

https://www.google.com/search?q=Virtual+list+en+c

Por otro lado podes usar Threads, por ejemplo que tú programa cree un hilo/thread por cada 100/300/500 mil filas.

La razón de porque el programa trabaja cada vez más lento cuando va cargando las filas, puede ser porque está cargando constantemente en memoria los datos sin ser liberada, deberías liberar memoria después del volcado de datos, mira aquí que interesante esto:



https://www.google.com/search?q=liberar+memoria+free+c

Vos tenés problema con la función malloc() y existe la función free() para justamente liberar memoria.


Saludos


« Última modificación: 21 Octubre 2021, 23:14 pm por Danielㅤ » En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Windows reduce velocidad de ejecucion.
« Respuesta #21 en: 21 Octubre 2021, 23:25 pm »

marax: de nada, me alegro de que lo hayas solucionado.

Danielㅤ: super intersante, tambien estan los operadores new y delete.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Windows reduce velocidad de ejecucion.
« Respuesta #22 en: 22 Octubre 2021, 16:57 pm »

Iba a señalar que me perdía, porque por un lado habladas de cargar el fichero de 20 mb. y luego en otro mensaje decías que lo cargadas inmediato (que es lo lógico)... y también que usabas 11mill millones de filas... que no entendía de donde salían sobre 20Mb. (salvo combinaciones con dichos elementos, pero que no explicaba explicitamente, pues se hablabas de estructuras,registros) ... pero el tema parece finalmente aclarado, así que así no tiene sentdo darle más vueltas.

Solo indicarte que las listas enlazadas son una estructura interesante cuando de lo que se trata es de hacer añadido dinámico y de antemano no se sabe cuanto ha de ser dicho tamaño.
Pero solo es útil finalmente si el resorrido que se precisa usar es secuencial, si el recorrido preciso es aleatorio, entonces la listas enlazadas tienen un pobre rendimiento, porque para ir hasta el índice 20millones cuando hay mill millones de items, requiere ser recorrido uno a uno desde el nodo raíz o desde el nodo final (si es doblemente enlazada).
Si tiras de estructuras que provee el lenguaje, se le supone un rendimiento eficaz (digamos que estará optimizado), si en cambio es una implementación propia, al caso conviene cuando menos mantener un item 'actual', de modo que un salto a otro punto distante pueda verificarse desde que punto queda más cerca: raiz, final o actual y la dirección de avance, para hacer el recorrido lo más óptimo posible en ese aspecto.
Mantener un item 'actual', complica el diseño de la implementación porque debe mantenerse con cada operación que lo afecte, así el costo del resto de operaciones aumenta a cambio de ser más óptimo en acceso.

En definitiva  tienes que tener claro si la lista enlazada es la mejor estructura que precisas en tus pesquisas. Cada estructura de datos tiene su fuerte y ninguna es óptima en cada punto.
En línea

Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Windows reduce velocidad de ejecucion.
« Respuesta #23 en: 25 Octubre 2021, 12:03 pm »

Hola, tal vez usando Virtual List mejores la velocidad de carga:

https://www.google.com/search?q=Virtual+list+en+c

Por otro lado podes usar Threads, por ejemplo que tú programa cree un hilo/thread por cada 100/300/500 mil filas.

La razón de porque el programa trabaja cada vez más lento cuando va cargando las filas, puede ser porque está cargando constantemente en memoria los datos sin ser liberada, deberías liberar memoria después del volcado de datos, mira aquí que interesante esto:



https://www.google.com/search?q=liberar+memoria+free+c

Vos tenés problema con la función malloc() y existe la función free() para justamente liberar memoria.


Saludos

Hola Daniel, gracias por tu respuesta.

El problema era este: Mira la funcion que usaba para añadir entradas en la lista enlazada:

Código
  1. int QuotesMemAddEnd (struct __quotesmem **qm, struct __quotesmem qmData)
  2. {
  3.    struct __quotesmem *aux=(struct __quotesmem *)malloc(sizeof(struct __quotesmem));
  4.    struct __quotesmem **base;
  5.    if(aux==NULL)
  6.    {
  7.        return MTERR_NOT_ENOUGH_MEMORY;
  8.    }
  9.  
  10.    memcpy((struct __quotesmem *) aux,
  11.           (struct __quotesmem *) &qmData,
  12.           sizeof (struct __quotesmem));
  13.  
  14.    aux->next=NULL;
  15.  
  16.    if(*qm==NULL)
  17.    {
  18.        aux->last=NULL;
  19.        *qm=aux;
  20.    }
  21.    else
  22.    {
  23.        base=qm;
  24.        while((*base)->next!=NULL)
  25.        {
  26.            base=&((*base)->next);
  27.        }
  28.  
  29.        aux->last=*base;
  30.        (*base)->next=aux;
  31.    }
  32.  
  33.    return 0;
  34. }

Este programa lo hice con el fin de lidiar con muchos datos, y las pruebas del mismo las hacia precisamente con pocos datos, para no enrollarme en la depuracion. La cuestion fue algo muy curioso... Precisamente porque usaba pocos datos para probarlo, no me di cuenta del problema: Nunca me gusto usar el concepto de cabeza en mis listas enlazadas, siempre me parecio una perdida de tiempo porque nunca lidie con mas de diez kilobytes en una lista enlazada (y esto ya es monumental).

No se si te fijaste en que la lista recorre cada elemento hasta llegar a la cabeza para entonces añadir el siguiente. Lo que pasa es que cuando son demasiadas entradas el programa tiene que recorrer tantas cuantas sean, tantas cuantas sean veces. Es decir, en "Tiempo parabolico" (El tiempo se elevaria al cuadrado, mas o menos) Y por eso justamente la funcion era cada segundo mas lenta, porque iba recorriendo mas millones de entradas a medida que se añadian, basicamente lanzando el rendimiento por la borda  :xD

Ni malloc, ni nada... Pura pereza de programador...

De todas formas alojar memoria para todo el archivo de una vez me vino mejor. Lo seguire haciendo.



Iba a señalar que me perdía, porque por un lado habladas de cargar el fichero de 20 mb. y luego en otro mensaje decías que lo cargadas inmediato (que es lo lógico)... y también que usabas 11mill millones de filas... que no entendía de donde salían sobre 20Mb. (salvo combinaciones con dichos elementos, pero que no explicaba explicitamente, pues se hablabas de estructuras,registros) ... pero el tema parece finalmente aclarado, así que así no tiene sentdo darle más vueltas.

Solo indicarte que las listas enlazadas son una estructura interesante cuando de lo que se trata es de hacer añadido dinámico y de antemano no se sabe cuanto ha de ser dicho tamaño.
Pero solo es útil finalmente si el resorrido que se precisa usar es secuencial, si el recorrido preciso es aleatorio, entonces la listas enlazadas tienen un pobre rendimiento, porque para ir hasta el índice 20millones cuando hay mill millones de items, requiere ser recorrido uno a uno desde el nodo raíz o desde el nodo final (si es doblemente enlazada).
Si tiras de estructuras que provee el lenguaje, se le supone un rendimiento eficaz (digamos que estará optimizado), si en cambio es una implementación propia, al caso conviene cuando menos mantener un item 'actual', de modo que un salto a otro punto distante pueda verificarse desde que punto queda más cerca: raiz, final o actual y la dirección de avance, para hacer el recorrido lo más óptimo posible en ese aspecto.
Mantener un item 'actual', complica el diseño de la implementación porque debe mantenerse con cada operación que lo afecte, así el costo del resto de operaciones aumenta a cambio de ser más óptimo en acceso.

En definitiva  tienes que tener claro si la lista enlazada es la mejor estructura que precisas en tus pesquisas. Cada estructura de datos tiene su fuerte y ninguna es óptima en cada punto.

Que preciso   ::)
Diste en el blanco, Serapis.
« Última modificación: 25 Octubre 2021, 12:06 pm por marax » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Windows reduce velocidad de ejecucion.
« Respuesta #24 en: 27 Octubre 2021, 22:22 pm »

Podrías haber simplemente haber guardado una referencia a la cola para que la inserción no sea O(n)...
En línea

Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Windows reduce velocidad de ejecucion.
« Respuesta #25 en: 29 Octubre 2021, 11:32 am »

Podrías haber simplemente haber guardado una referencia a la cola para que la inserción no sea O(n)...

Lo se. En la proxima modificacion eso hare... Y cambiare a malloc por HeapAlloc. Me imagino que es poca la diferencia de tiempo entre las dos pero como es un factor proporcional al final compensa.

Gracias.

Buenas noches.
En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SFX Winrar: velocidad de ejecucion
Hacking
agustinbv9 2 3,656 Último mensaje 21 Febrero 2011, 05:18 am
por agustinbv9
REDUCE LA VELOCIDAD
Redes
dragos89 1 2,100 Último mensaje 13 Marzo 2011, 13:46 pm
por Printf
Aumento la velocidad del bus pero se reduce el multiplicador
Hardware
crazykenny 5 5,438 Último mensaje 26 Diciembre 2011, 19:51 pm
por crazykenny
Qt velocidad de ejecucion
Programación C/C++
makinavaja3500 0 3,248 Último mensaje 4 Octubre 2015, 02:13 am
por makinavaja3500
Se reduce la velocidad de adopción de IPv6: ¿qué está pasando?
Noticias
wolfbcn 0 3,199 Último mensaje 22 Mayo 2018, 21:44 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines