[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