Ne znam šta tačno podrazumevaš pod optimizacijom, ali u tvom slučaju deo koda:
Citat:
Code:
if(Memo1->Lines->IndexOf("</Disc>")!=-1) {
brojac=i;
break;
}
... je jako loš.
Koliko vidim ti hoćeš da prekineš upis kada naiđeš na "</Disc>". U tvom primeru, korišćenje
IndexOf() metode inicira ponovnu pretragu od prve do poslednje linije, iako si već proveravao
prethodne linije. To je jako veliki gubitak i otuda toliko utrošeno vreme.
Taj deo koda zameni na primer ovim /netestirano/:
Code:
if ( Memo1->Lines->Strings[i].AnsiPos( "</Disc>" ) != 0 )
{
brojac=i;
break;
}
Dalje, ukoliko ti je potrebno da neki fajl učitaš u NE-VIZUELNU kontrolu radi lakše naknadne pretrage
i sl, možeš upotrebiti i TStringList klasu:
Code:
TStringList *SL = new TStringList;
SL->LoadFromFile( /* neki fajl */ );
// ovde možeš po želji da prrolaziš kroz listu, modifikuješ, brišeš i sl.
delete SL;
... i kasnije to možeš da pridružiš nekom TMemo objektu na način koji ti je već poznat u prethodnom
tvom pitanju.
Dalje, velika količina Add()-ova u TMemo objekat takođe može da 'jede' vreme. Tada se koristi:
Code:
Memo1->BeginUpdate();
// ovde tvoja petlja koja dodaje linije...
Memo1->EndUpdate();
ili još bolje /malo modernije i sigurnije/:
Code:
--- H ---
class RAII_MemoEditLock
{
private:
TMemo *ME;
public:
RAII_MemoEditLock( TMemo *me ) : ME( me )
{
if ( ME )
ME->Lines->BeginUpdate();
}
~RAII_MemoEditLock()
{
if ( ME )
ME->Lines->EndUpdate();
}
};
--- CPP ---
void TForm1::FunkcijaKojaDodajeLinije()
{
RAII_MemoEditLock Lock( Memo1 );
// ovde tvoja petlja koja dodaje linije...
}