Mam problem pri spracovani velkeho CSV suboru. Pri jeho importovani to StringGridu (cca 25000 rekordov) je app zatuhnuta a neda sa s nou pracovat. Taktiez nacitavanie tych dat je strasne zdlhave. Nacitavam to standardnou metodou a tam je na 99% kamen urazu. Potreboval by som poradit ako sa takyto problem riesi profi.
Teoriu mam, thready pre jedntlive rekordy(riadky) a medzi tym obsluha jadra. Ale neviem ako to implementovat.
edit1: teraz som nasiel metodu nacitania do pamate (TMemoryStream). Bolo by to riesenie? Potom, ale zas treba percitat riadky, to bude oriesok.
este cast kodu na spracovanie:
Kód: Vybrať všetko
var
F1: TextFile;
Tmp: string;
riadok,stlpec: Longint;
AssignFile(F1,OpenDialog1.FileName);
try
Reset(F1);
try
riadok := 1;
while not EoF(F1) do begin
ReadLn(F1,Tmp);
stlpec := 1;
while Pos(',',Tmp) > 0 do begin
StringGrid1.Cells[stlpec,riadok] := Copy(Tmp,1,Pos(',',Tmp)-1);
Delete(Tmp,1,Pos(',',Tmp));
inc(stlpec);
end;
inc(riadok);
StringGrid1.Refresh
end;
finally
CloseFile(F1);
end;
except
on E:EInOutError do
case E.ErrorCode of
2 : ShowMessage('Subor nenajdeny!');
103 : ShowMessage('Subor neotvoreny!');
else
ShowMessage('Neocakavana chyba!');
end;
end;Audiotrack, nemas pre mna dajake riesenie? 1M subor s 25k rekordami do 1-3s?
Predpokladam najrychlejsie by to bolo presunom najprv do pamate (MemoryStrem?) a nasledne do tabulky formou threadov, nech je app stale dostupna (reakcia na uzvatelske vstupy).
do Toho MemoryStreamu to vyzera byt u mna rychle, ale uz presun a zobrazenie je zalostne pomale.