[Lazarus-es] TStringList

José Mejuto joshyfun en gmail.com
Mar Feb 19 14:06:42 CET 2013


El 19/02/2013 12:46, "Omar D. González R." escribió:
> Hola amigos,
> Me gustaría saber si el TStringList tiene un límite de filas, que está
> dado por las características del componente o está limitado por el
> programa del equipo donde se usa.
> Estoy intentando leer un archivo de texto de 3.100.000 registros y se
> cae por problemas de memoria. Lo pregunto para ver si resuelvo el
> problema disponibilizando mas memoria para la aplicación.
>

Hola,

Técnicamente 2000 millones de lineas, pero eso es imposible de alcanzar 
en un equipo de 32 bits ya que cada linea (con contenido) ocupa el 
contenido de la linea, más la configuración de los bloques de memoria 
para cada string, más la información de control de las lineas y lo peor, 
la fragmentación que genera en la memoria.

Si las lineas son todas de la misma longitud mejor leerlas todas en un 
solo bloque de memoria.

Si no tienen longitud fija y necesitas acceder a todas en memoria, 
cargas todas las lineas en un bloque de memoria, luego haces un array 
dinámico de "pointer" o "integer" (según convenga) que vas haciendo 
crecer en bloques de 1000 o 10000 elementos y buscas donde empieza cada 
linea y lo apuntas en ese array.

En el sistema todo dependerá de que necesitas hacer con las lineas una 
vez cargadas, leerlas, reordenarlas, borrar, añadir, insertar....

-- 





More information about the Lazarus-es mailing list