gvSIG bugs #2283

Out of memory navigating on a simple table document

Added by Cesar Martinez Izquierdo about 10 years ago. Updated about 10 years ago.

Status:Closed% Done:

0%

Priority:ImmediateSpent time:-
Assignee:Joaquín del Cerro Murciano
Category:Document table
Target version:2.1.0-2221-testing
Severity: Add-on version:
gvSIG version:2.1.0 Add-on build:
gvSIG build:2218 Add-on resolve version:
Operative System: Add-on resolve build:
Keywords: Proyecto:
Has patch:No Hito:
Add-on name:Unknown

Description

When navigating on the table document of a shapefile having a simple table (about 300 records), I get an out of memory error.

The shapefile can be downloaded from the following website (requires free register):
http://www.marineregions.org/downloads.php
(Then choose EEZ v7 layer).

Steps to reproduce:

1- Load the layer on a view
2- Open the attribute table
3- Scroll down several pages

Result:
gvSIG will start using 100% of the CPU, then an OutOfMemory error will pop up after some seconds or minutes.

gvSIG.log (480 KB) Cesar Martinez Izquierdo, 02/03/2014 05:21 PM

TableDocument.zargo (11.7 KB) Joaquín del Cerro Murciano, 03/01/2014 02:48 AM

TableDocument.png (25.2 KB) Joaquín del Cerro Murciano, 03/01/2014 02:48 AM

800

Related issues

Related to Application: gvSIG desktop - gvSIG feature requests #1618: sort table column OutOfMemoryError / sin memoria al orden... Closed 02/13/2013
Related to Application: gvSIG desktop - gvSIG bugs #2434: Refresco de tabla y campo Geometry al editar Closed 03/10/2014
Related to Application: gvSIG desktop - gvSIG bugs #2485: Capa eventos error al abrir tabla Closed 04/04/2014
Related to Application: gvSIG desktop - gvSIG bugs #2437: Fallo al unir tablas Closed 03/10/2014

Associated revisions

Revision 41212
Added by Joaquín del Cerro Murciano about 10 years ago

Modificada la tabla para que solo cargue en las features las columnas que estan visibles.
refs #2283

Revision 41213
Added by Joaquín del Cerro Murciano about 10 years ago

Retocado el proveedor de shape para que no cargue la geometria si no es necesaria.
refs #2283

Revision 41215
Added by Joaquín del Cerro Murciano about 10 years ago

Mejorado el mensaje de error cuando se intenta cargar una leyenda para un capa y no se puede conseguir el simbolo por defecto asociado al tipo de geometria de la capa.
refs #2283

History

#1 Updated by Álvaro Anguix about 10 years ago

  • Category set to Document table
  • Priority changed from Normal to Immediate
  • Target version set to 2.1.0-2219-testing
  • gvSIG build set to 2218

He comprobado con el shp que comenta César y ocurre tal como dice.
Complementando la información: si añado la tabla (dbf) del shp como tabla, funciona correctamente.
Es decir, el comportamiento se produce abriendo la tabla de atributos del shp.

#2 Updated by Cesar Martinez Izquierdo about 10 years ago

  • Target version deleted (2.1.0-2219-testing)

Viendo el log, creo que se debe a que de alguna manera accede a la geometría al pintar la tabla, y las geometrías sí son grandes.

#3 Updated by Juan Lucas Domínguez about 10 years ago

He estado mirando esto y efectivamente estamos replicando las features al navegar por la tabla. Las posibles soluciones que veo son:

- No replicar las geometrías, pero entonces habrá que mostrar una casilla vacía si el usuario activa la opción de ver también la geometría en la tabla (se le muestra como WKT). Se podría mostrar solo si es punto, por ejemplo.

- Rehacer el paginador para que no haga falta replicar las geometrías (es decir, quizá no usar un fast iterator sino un iterator normal?)

- Tener en cuenta si se están mostrando o no la geometría en la tabla para decidir si se intenta replicar o no la geometría. Tal como está hecho ahora. me parece que no hay acceso a ese dato desde el paginador.

#4 Updated by Álvaro Anguix about 10 years ago

  • Assignee set to Joaquín del Cerro Murciano

#5 Updated by Álvaro Anguix about 10 years ago

Una solución que al menos a nivel usuario veo viable:
- Cuando el usuario no activa el campo geometría (que por defecto no está visible) que no lo tenga en cuenta. Cuando lo active que recargue la tabla con dicho campo. Aquí ya en shp muy gordos, con miles de nodos, como el que comentaba César, dejamos en el usuario la decisión de abordar esto y la lentitud que provoca. Pero a priori el 99% de los usuarios no van a necesitar activar ese campo.
- A tener en cuenta, cuando la capa entre en edición, esa recarga con el campo geometría entiendo que debería realizarse.

#6 Updated by Álvaro Anguix about 10 years ago

  • Target version set to 2.1.0-2223-rc1

#7 Updated by Álvaro Anguix about 10 years ago

  • Target version changed from 2.1.0-2223-rc1 to 2.1.0-2221-testing

#9 Updated by Joaquín del Cerro Murciano about 10 years ago

Bueno, despues de pensar bastante creo que he hecho algo que parece solventar el problema.

El resumen seria...
Cuando intenta cargar las features para visualizarlas en la tabla solo carga los valores de la feature que estan visibles en la tabla, es decir los atributos de las columnas que no estan visibles pasa de cargarlos.
Salvo que se este en edicion, en cuyo caso se cargan todos los atributos de la feature, esten o no visibles, ya que son necesarios por si se tuviese que actualizar la feature.

El como.
El problema es que necesitamos tener la feature completa. No podemos quitarle columnas ya que eso podria provocar efectos extraños.
Lo que he hecho es añadir en el FeatureQuery la posibilidad de especificar que algunos atributos de la feature son constantes, con lo que no es preciso cargarlos de disco, y simplemente se les asigna el valor por defecto que tenga especificado el atributo. Y el modelo de la tabla se encarga de actualizar estos parametros del query con los campos que no estan visibles, todo esto solo si no estamos en edicion. Si la tabla esta en edicion, se le dice en el query que cargue la feature normalmente.

Como efecto secundario no deseado de esto, lo que sucede es que si vamos a propiedades de la tabla y marcanos o desmarcamos el check de visibilidad de una columna, se recargara la pagina corriente de la tabla entera de nuevo (atualmente son 100 registros por pagina).

He adjuntado al ticket el diagrama de clases que me he hecho sobre el modelo de clases de la tabla para aclararme, mas que nada por no tirarlo sin mas.
No es un modelo riguroso en ningun sentido, solo tiene lo justo para poder aclararme yo, y con la nomenclatura que me venia bien para esto.

Creo que funciona mejor que antes ya que no carga en las features que tiene cacheadas por pagina los campos que no se ven (por defecto, la geometria), aunque ahora habria que repasar cada proveedor de datos para ver si puede comprobar que campos debe cargar en memoria o no, ya que los proveedores de datos siguen cargando los datos que no se ven, aunque luego estos no se almacenen en la feature.

#10 Updated by Joaquín del Cerro Murciano about 10 years ago

Bien, pues retocar el proveedor de shape para que no cargue la geometria si no era necesario ha sido bastante sencillo y la diferencia en prestaciones con la capa "World_EEZ_v7_2012_HR" es sustanciosa.

#11 Updated by Joaquín del Cerro Murciano about 10 years ago

  • Status changed from New to Fixed

Oh!, me equivoque al meter el mensaje del commit de la revision r41215.
Debia ser :

Añadido al FeatureProvider un metodo isReadOnly para identificar si el proveedor debe o no escribir valores en un attributo en concreto.
Se ha modificado el proveedor de shape para que tenga eso en cuenta.

Me fallo el Ctrl-v.

#12 Updated by Álvaro Anguix about 10 years ago

  • Status changed from Fixed to Closed

Lo cierro, ya que se evita el problema que había, aunque derivado de la solución ha salido un nuevo bug que relaciono con este.

Also available in: Atom PDF