1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  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
Fehler beim Download bestimmter Webseiten mit httpGet Android App Entwicklung Donnerstag um 15:36 Uhr
Warum Stürtzt meine App ab? (Beim Öffnen von content_3) Android App Entwicklung 27.02.2018
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
Du betrachtest das Thema "OutofMemory beim Dateieinlesen" im Forum "Android App Entwicklung",