FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Arrays de millones de datos
Estimados. Tengo que manejar arrays (o alguna otra herramienta) de al menos 2 millones de números.
La idea es que voy generando numeros aleatorios (Tipo Double) que cumplan algunas condiciones pre fijadas y tengo que guardarlos todos para luego hacer un análisis estadístico del asunto. El problema es que no se donde guardarlos ya que un array de tantos datos me da "Stack overflow" cuando lo defino. Pensé en guardarlos en disco pero me pareció que iba a ser demasiado lento. Como lo harían Uds.? |
#2
|
||||
|
||||
En principio seguro que en disco va a ser muy lento, pero en memoria, puede ser que tengas problemas de espacio.
Revisa el consumo de memoria cuando los guardas en array y si el problema radica ahí, deberás optar por la opra opción.
__________________
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. |
#3
|
||||
|
||||
Y una pregunta: ¿vas a necesitar en memoria "al mismo tiempo" esos 2 millones de números?.
Quizás te interese crear un array de punteros, como hacen las hojas de cálculo, que realmente sólo ocupan memoria las "celdas" rellenas, el resto no ocupa más que unos bytes.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
|||
|
|||
Cita:
|
#5
|
||||
|
||||
Creo que deberías utilizar "bancos", por ejemplo de 1.000 elementos cada uno. En cada momento sólo tienes 10 bancos en memoria mientras que en disco estarán todos. Cuando necesitas un dato de un banco determinado primero compruebas si está cargado en memoria. De no estarlo, lo carga. Si no hay espacio para tener más bancos en memoria, comprueba qué banco es el más "viejo" o el que ha sido utilizado menos veces y lo liberas (guardándolo primero en disco si ha sido modificado) para dejar sitio al nuevo banco.
Esto no sólo hará que necesites menos memoria sino también que vaya más rápido a la hora de modificar la lista en disco, ya que dudo que vayas a modificar todos los 2,000.000 de elementos en una sola vez. |
#6
|
|||
|
|||
Hola, puedes probar de generar un array dinamico y luego darle el tamaño conveniente :
ten en cuenta por eso que 2000000 de doubles es mucha memoria. Es mas que probable que muchas veces no la encuentre. |
#7
|
||||
|
||||
Un double son 8 bytes de memoria, 2.000.000 de doubles son 15 MB de memoria, pse, tampoco es tanto, los equipos de hoy suelen tener 2 GB ¿o no?
Que sí, que habrá que tener especial cuidado con reservar la memoria y con las excepciones que pueda dar, pero creo que es viable. En mi opinión, no andaba cargando "en bancos" los datos, primero haría pruebas a ver que tal va (sobre todo en el equipo del usuario, del cliente), después, si son muchos errores, atacaría por ese lado. Edito: coso, ya que has hecho la prueba, si quitas el processmessages, ¿cuanto tiempo tarda en recorrer todo el array? (gettickCount creo que era la api...) Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 13-10-2008 a las 13:19:55. |
#8
|
|||
|
|||
Pues no mucho, no...
muestra '16', con application.ProcessMessages, '47' |
#9
|
|||
|
|||
Gracias a todos
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Filtran datos de 6 millones de chilenos | MAXIUM | Noticias | 1 | 12-05-2008 22:02:59 |
Asignar valores a Arrays dinámicos - (migrar datos desde CLIPPER) | jplj | Varios | 14 | 15-10-2007 12:49:48 |
arrays javascript y php | halizia | PHP | 6 | 03-05-2007 14:43:31 |
Arrays dinamicos | Besto | Varios | 4 | 13-10-2006 16:24:01 |
arrays | nenufer | Varios | 7 | 13-05-2006 22:44:51 |
|