1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. GMoN, 18.04.2009 #1
    GMoN

    GMoN Threadstarter Android-Lexikon

    Beim Versuch eine Text Datei mit ca. 57.000 Zeilen und einer Größe von 9,5MB als ArrayList einzulesen bekomme ich eine OutOfMemory Exception. Dabei steht doch jeder Anwendung 16Mb zur Verfügung.

    Gibt es eine Methode diese Datei einzulesen, welche mit weniger Speicher auskommt? Eine Datenbank ist warscheinlich nicht performant genug. Aus diesem Datenbestand müssen innerhalb von wenigen Sekunden ca 30 Einträge überprüft werden, ob sie schon vorhanden sind, falls nicht, dann müssen sie hinzugefügt werden. Das ganze funktioniert eigentlich nur im Speicher mit binärer Suche und nem schnellen sort. Ginge das mit ner Datenbank? Bei Symbinan ging es nicht als Datenbank, allerdings konnte ich da dieses 9,5 MB File problemlos als Liste komplett einlesen.

    Code:
    public static ArrayList<String> loadFile(String fileName)
            {
                if ((fileName == null) || (fileName == ""))
                    throw new IllegalArgumentException();
                
                String line;
                ArrayList<String> file = new ArrayList<String>();
    
                try
                {    
                    BufferedReader in = new BufferedReader(new FileReader(fileName));
    
                    if (!in.ready())
                        throw new IOException();
    
                    while ((line = in.readLine()) != null)
                        file.add(line);
    
                    in.close();
                }
                catch (IOException e)
                {
                    System.out.println(e);
                    return null;
                }
    
                return file;
            }
     
  2. Markus, 18.04.2009 #2
    Markus

    Markus Gewerbliches Mitglied

    Musst Du denn tatsächlich alle Zeilen auf einmal im Speicher halten?
    Wenn nur wenige interessant sind, könntest Du ein Filtermechanismus oder ähnliches ergänzen.

    Wenn Du aber tatsächlich alles einlesen musst, musst Du fast auf ein byte array switchen. Allein schon weil Java Strings 2 Byte pro Character brauchen.
     
  3. GMoN, 29.04.2009 #3
    GMoN

    GMoN Threadstarter Android-Lexikon

    Ich denke, dass ich nicht drumherum komme, alle Daten im Speicher zu haben. Ich muss ja ständig prüfen, ob neue Daten schon drin sind oder nicht.

    Von der Datenmenge, müßte man das eigentlich als richtige Datenbank realisieren aber das ist nicht schnell genug.

    Warscheinlich vergeudet die ArrayList zu viel Speicher, so richtig schnell ist sie auch nicht, das Sortieren von knapp 30.000 Zeilen dauert ca. 800ms.

    Frage, wie kann ich in Eclipse den Speicherverbrauch (RAM) meiner App sehen?
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Bitmap.recycle funktioniert nach drawBitmap nicht Android App Entwicklung 18.07.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
[ERLEDIGT] App stürzt neuerdings beim anzeigen des eigenen Standorts ab Android App Entwicklung 19.03.2017
Verständnisprobleme beim Layout Android App Entwicklung 21.02.2017
Probleme beim Encoding einer Textdatei von Windows Android App Entwicklung 25.01.2017
App stürzt beim Button Klick ab Android App Entwicklung 12.01.2017
Fehler beim Einbinden von Google Maps in eine App Android App Entwicklung 13.12.2016
Import Fehler beim Navigation Drawer Android App Entwicklung 01.12.2016
Problem beim Einbinden von Appcompat Android App Entwicklung 30.10.2016
Du betrachtest das Thema "OutofMemory beim Dateieinlesen" im Forum "Android App Entwicklung",