1. Liebe/r Gast, Android-Hilfe.de wird am 26.02.2018 zwischen 08:00 Uhr und 09:00 Uhr, aufgrund von Wartungsarbeiten, für etwa 30 Min. nicht oder nur eingeschränkt erreichbar sein. Wir bitten um Verständnis.
  2. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  3. Chuwi Hi9 & Dodocool Bluetooth Box Gewinnspiel ! Alle Informationen 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
Problem beim Geofencing in einer Android App Android App Entwicklung 24.11.2017
[OFFEN] Fehler beim Projekt importieren Android App Entwicklung 03.10.2017
[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
Du betrachtest das Thema "OutofMemory beim Dateieinlesen" im Forum "Android App Entwicklung",