Rendimiento del almacén constante

El almacén constante se encuentra en el almacenamiento para aplicaciones. Hay más latencia en el proceso de escritura en el almacenamiento para aplicaciones que en el proceso de lectura del mismo. El proceso de lectura del almacén constante es relativamente rápido mientras que los objetos commits son relativamente lentos.

Práctica recomendada: uso de una selección de estructura de datos eficaz

La selección de la estructura de datos define cuántos identificadores de objetos y cuánta memoria flash consume una aplicación. La selección de la estructura de datos no adecuada puede consumir recursos clave sin mejorar la funcionalidad o la experiencia del usuario.

Considere las siguientes directrices:

  • La estructura de datos debe contener el mínimo número posible de objetos, especialmente cuando utiliza objetos de alto nivel como un Vector o un Hashtable. Estas clases ofrecen una funcionalidad considerable pero no constituyen mecanismos eficaces de almacenamiento: debe evitar utilizarlos en el almacén constante si es posible.
  • Siempre que sea posible, utilice valores básicos en lugar de objetos, los valores básicos reducen el número de identificadores de objetos consumidos en el smartphone. Una matriz de valores básicos es un objeto y consume un identificador de objetos.
  • Los objetos String son tan eficaces como las matrices de bytes. Un objeto String consume sólo un identificador de objetos y es equivalente si su aplicación almacena todos los caracteres como un byte. En otras palabras, el valor de cada carácter es menor que o igual al valor decimal de 255. Si la aplicación no puede almacenar caracteres como un byte, puede almacenar los caracteres como un objeto String, que equivale al almacenamiento de una matriz char.

Práctica recomendada: conservar identificadores de objetos

Uno de los errores más comunes con los que se encuentran los desarrolladores de aplicaciones es el agotamiento de los identificadores de objetos constantes. La cantidad de espacio de almacenamiento para aplicaciones en el smartphone determina el número fijo de los identificadores de objetos constantes que están disponibles en el sistema. Dependiendo de la selección de la estructura de datos, los registros almacenados pueden agotar rápidamente el número de identificadores de objetos constantes. Un objeto constante consume un identificador de objetos constante y un identificador de objetos. Un objeto provisional consume sólo un identificador de objetos.

Por ejemplo, un registro que contenga diez campos String, que representan elementos como un nombre, un número de teléfono y una dirección, consume 11 identificadores de objetos constantes, uno para el objeto registrado y otro para cada String. Si una aplicación contiene 3.000 registros, la aplicación consume 33.000 identificadores de objetos constantes, lo cual excede el número de identificadores de objetos constantes disponibles en un smartphone con 16 MB de memoria flash.

Puede utilizar la clase net.rim.device.api.system.ObjectGroup para consolidar los identificadores de objetos de un objeto en un grupo. Utilizando el ejemplo del párrafo anterior, si agrupa el registro, éste consume un identificador de objetos constante en vez de 11. Los identificadores de objetos para los campos String se consolidan bajo el identificador de objetos registrado.

Cuando consolida los identificadores de objetos en un grupo, el identificador de objetos es de sólo lectura. Debe desagrupar el objeto antes de poder cambiarlo. Una vez realizados los cambios, agrupe de nuevo el objeto. Si intenta cambiar un objeto agrupado sin agruparlo en primer lugar, se genera una excepción ObjectGroupReadOnlyException.

Desagrupar un objeto tiene un impacto en el rendimiento. El sistema crea una copia del objeto agrupado y asigna identificadores a cada uno de los objetos dentro de ese grupo. Por lo tanto, los objetos sólo deben desagruparse cuando sea estrictamente necesario.

Es posible que los objetos commit del almacén constante tengan lugar durante la recogida de datos desechables sin un objeto commit() explícito, por lo que el agrupamiento de objetos debe ocurrir siempre antes de las llamadas a setContents() o commit(). Para obtener más información acerca de la agrupación de objetos, consulte net.rim.device.api.system.ObjectGroup.

Limpieza de objetos constantes

Cuando se elimina una aplicación del smartphone BlackBerry, los objetos constantes definidos dentro de la aplicación se eliminan automáticamente. Esto es porque cada objeto constante tiene un tipo de clase definida en la aplicación. Cuando la aplicación se elimina, el tipo de clase se elimina, por lo que los objetos constantes también se eliminan.

Para garantizar la limpieza del almacenamiento constante en uso, debe siempre almacenar las instancias de sus propias clases o sus propias extensiones de las clases proporcionadas.

Para eliminar los datos individuales, considere los datos como objetos normales y elimine las referencias a los mismos. La operación de recopilación de datos desechables eliminará los datos.


¿Le ha resultado útil esta información? Envíenos sus comentarios.