Autore Topic: Uso di Memory Mapped File  (Letto 443 volte)

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
  • Sistema operativo:
    Win XP
Uso di Memory Mapped File
« il: 08 Luglio 2011, 11:03:07 CEST »
Ciao a tutti,
sarei curioso di vedere come influisce sulle prestazioni del mio gioco l'uso di immagini memory mapped. Da quello che ho studiato in rete, si tratta di memorizzare le immagini sulla SD e poi swapparle nella RAM quando servono, lasciando l'heap libero. Ovviamente mi aspetto di migliorare soprattutto nei confronti del maledetto OOM che mi perseguita  >:(
Ho trovato uno snipplet, ma non riesco bene ad interpretarlo:

Codice (Java): [Seleziona]
    // Creating a very large file using mapping.
    // {RunByHand}
    // {Clean: test.dat}
    import java.nio.*;
    import java.nio.channels.*;

    public class LargeMappedFiles {
      static int length = 0x8FFFFFF; // 128 Mb
      public static void main(String[] args) throws Exception {
        MappedByteBuffer out =
          new RandomAccessFile("test.dat", "rw").getChannel()
          .map(FileChannel.MapMode.READ_WRITE, 0, length);
        for(int i = 0; i < length; i++)
        System.out.println("Finished writing");
        for(int i = length/2; i < length/2 + 6; i++)
    } ///:~

To do both writing and reading, we start with a RandomAccessFile, get a channel for that file, and then call map( ) to produce a MappedByteBuffer, which is a particular kind of direct buffer. Note that you must specify the starting point and the length of the region that you want to map in the file; this means that you have the option to map smaller regions of a large file.

MappedByteBuffer is inherited from ByteBuffer, so it has all of ByteBuffer’s methods. Only the very simple uses of put( ) and get( ) are shown here, but you can also use things like asCharBuffer( ), etc.

The file created with the preceding program is 128 MB long, which is probably larger than the space your OS will allow. The file appears to be accessible all at once because only portions of it are brought into memory, and other parts are swapped out. This way a very large file (up to 2 GB) can easily be modified. Note that the file-mapping facilities of the underlying operating system are used to maximize performance.

Qualcuno mi può delucidare come fare ad usare questo metodo per le mie immagini e animazioni?
Zapmobilegames website
Tic Tank Toe: a new approach for a classic game