Prestazioni della memoria permanente

La memoria permanente si trova nella memoria applicazione. La latenza è maggiore durante la scrittura sulla memoria applicazione che durante la lettura. Ad esempio, la lettura dalla memoria permanente è relativamente veloce mentre i commit sono relativamente lenti.

Procedura consigliata: selezione di una struttura dati efficiente

La selezione della struttura dati definisce quanti handle di oggetti e quanta memoria flash viene utilizzata da un'applicazione. Una selezione non appropriata delle struttura dati può aumentare il consumo delle risorse principali senza migliorare la funzionalità o l'esperienza dell'utente.

Attenersi alle seguenti istruzioni:

  • La struttura dati dovrebbe includere il numero minimo possibile di oggetti, soprattutto quando si utilizzano oggetti di livello generale, quali gli oggetti Vector o Hashtable. Queste classi forniscono funzionalità rilevanti ma non rappresentano meccanismi di memorizzazione efficienti; pertanto, se possibile, si dovrebbe evitare di utilizzarli nella memoria permanente.
  • Se possibile, utilizzare le primitive anziché gli oggetti, poiché esse riducono il numero di handle di oggetti in uso sullo smartphone. Un array di primitive è un oggetto e utilizza un handle di oggetto.
  • Gli oggetti String sono efficienti come gli array di byte. Un oggetto String utilizza solo un handle di oggetto ed è equivalente se l'applicazione archivia tutti i caratteri come byte. In altre parole, il valore di ogni carattere è uguale o inferiore al valore decimale di 255. Se l'applicazione non è in grado di archiviare i caratteri come byte, è possibile archiviarli come oggetto String, che equivale all'archiviazione di un array di tipo char.

Procedura consigliata: conservazione degli handle di oggetti

Uno degli errori più comuni segnalato dagli sviluppatori delle applicazioni è l'esaurimento degli handle di oggetti permanenti. La quantità di spazio per la memoria applicazioni sullo smartphone determina il numero fisso di handle di oggetti permanenti disponibili nel sistema. In base alla selezione della struttura dei dati, i record archiviati possono esaurire rapidamente il numero di handle di oggetti permanenti. Un oggetto permanente utilizza un handle di oggetti permanenti e un handle di oggetto. Un oggetto transitorio utilizza solo un handle di oggetto.

Ad esempio, un record contenente dieci campi String che rappresentano elementi quali il nome, il numero di telefono e l'indirizzo, utilizza 11 handle di oggetti permanenti, uno per l'oggetto record ed uno per ogni oggetto String. Se un'applicazione memorizza 3000 record, tale applicazione utilizza 33.000 handle di oggetti permanenti, superando il numero di handle di oggetti permanenti disponibili su uno smartphone con una memoria flash da 16 MB.

È possibile utilizzare la classe net.rim.device.api.system.ObjectGroup per raggruppare gli handle di oggetto per un oggetto in un gruppo. Utilizzando l'esempio contenuto nel paragrafo precedente, se si raggruppa il record, esso utilizza un handle di oggetti permanenti anziché 11. L'oggetto gestisce i campi String da raggruppare in un handle di oggetti a livello di record.

Quando si raggruppano gli handle di oggetto in un gruppo, l'handle di oggetto è di sola lettura. Prima di poter modificare l'oggetto, è necessario separarlo dal gruppo. Dopo aver apportato le modifiche, raggruppare di nuovo l'oggetto. Se si tenta di modificare un oggetto raggruppato senza prima separarlo dal gruppo, si verifica un'eccezione ObjectGroupReadOnlyException.

La separazione di un oggetto da un gruppo ha impatto sulle prestazioni. Il sistema crea una copia dell'oggetto raggruppato e assegna gli handle a ciascuno degli oggetti contenuti nel gruppo. Pertanto gli oggetti dovrebbero essere separati dal gruppo solo quando necessario.

È possibile che il processo di garbage collection senza un oggetto commit() esplicito generi dei commit alla memoria permanente. Pertanto, il raggruppamento degli oggetti deve essere seguito sempre prima delle chiamate a setContents() o commit(). Per ulteriori informazioni sul raggruppamento degli oggetti, vedere net.rim.device.api.system.ObjectGroup.

Pulizia di oggetti permanenti

Quando un'applicazione viene rimossa da uno smartphone BlackBerry, gli oggetti permanenti definiti all'interno dell'applicazione vengono eliminati automaticamente. Ciò avviene perché ciascun oggetto permanente presenta un tipo di classe definito nell'applicazione. Quando l'applicazione viene rimossa, il tipo di classe viene eliminato e lo stesso avviene per gli oggetti permanenti.

Per assicurare la pulizia della memoria permanente in uso, è necessario memorizzare sempre le istanze delle proprie classi o le proprie estensioni delle classi fornite.

Per eliminare singoli dati, trattare i dati come oggetti normali e rimuovere i riferimenti ad essi. L'esecuzione di un'operazione garbage collection consente di rimuovere i dati.


Le informazioni sono state utili? Inviateci i vostri commenti.