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.
|