Naja..... wenn man via scrollbar an die stellen will muss ich seeken-sonst muss ich 5GB im Speicher haben
neeee, du entzippst ja ned direkt in den speicher, oder doch ??? ^^
Deine Rangehensweisse iss bissi .... naja naiv.
du musst die datei zu ende auspacken, aum das ende zu sehen. Das schlimme daran iss, das der User wahrscheinlich zuerst das ende sehen will.
Leider verpackst du die dateien ned, sonnst koenntest es umdrehen ^^
wie gesagt ich wuerd dir "highly" empfehlen dich mit den models und mit threads und mit IO Operationen und deren grundlagen zu beschaeftigen.
Das maximalste IMHO was du aus deiner Anwendung bei deinen gegegebenheiten durchbekommst, iss:
- der User klickt aufn Logfile.
- Datei wird im hintergrund entzippt
- optional bekommt der user ne progressanzeige zu sehen
- parallel dazu liesst du scho die ersten eintraege
- zeigst dem user die eintraege an ....
- schiebst immer mehr eintraege in deinen view .... der user hat den eindruck das "der view sich fuellt"
- der ganze spuck in der zeit vorbei ist, wo du normal auch die datei selber entzippen wuerdest. also bei deinen 5GB die 5 min ....
- und dem user fliegt dabei nich sein Arbeitsspeicher um die Ohren.
Dazu musst aber schon ziemlich tief in die Materie einsteigen. Ob sich die User mit weniger zufriedengeben ... keine Ahnung, aber mehr werden sie ohne weiteres ned bekommen, ohne das Du einfluss auf das abgespeicherte logfile nehmen muesstest.
Bei anderen dateien wuerde ich vielleicht empfehlen, zu der komprimierten datei nen index zu erstellen, welcher block welche zeilennummern enthaelt und das zur navigation verwenden. aber das wird sehr komplex und lohnt nur, wenn du die gleichen unveraenderten dateien oefters aufmachen musst. ergo ned in deinem fall.
Bevor ich mich mit der komprimierung beschaeftigen wuerd:
wuerd ich erst mal das 5GB File nehmen als input.
und dazu nen view bauen, wo der User per scrollbalken auf ungefaehre positionen springen kann .... ohne das wenn der den scrollbalken bewegt, gleich erst mal die App 2 min steht .... sondern das quasi sofort passiert, und der verwendete arbeitsspeicher auch nicht mal fix um 2GB ansteigt. Und das ganze natuerlich noch so, das deine eigene Funktionalitaet immer noch einhaengen kannst, also kein fertigen filewiever einbaust den ned mehr beeinflussen kannst ^^
Und glaub mir, das ist schon ne sehr Fortgeschrittene Thematik und alles andere als trivial.
Nur mal nen rechenbeispiel :
deine 5 GiByte
=1024*1024*1024 * 5 Byte
ne Zeile hat wieviel byte ? ich schaetz mal um die 50 Zeichen im schnitt.
annaehernd 100 Mill Zeilen oder ?
nun schreib mir mal ne performate funktion, die in einem Textfile mit ueber 100 Mill zeilen, an das erste Zeichen der 97.345.768ten Zeile springt !
Vielleicht bekommst nun nen gefuehl, wie nichttrivial dein problem ist !
Ciao ...