Newsgroup: it.comp.lang.delphi
Titolo: TStringGrid mostruosamente lento, cercasi alternativa

Sto scrivendo un disassemblatore e ho scelto una StringGrid per mostrare 
l'asm nel classico formato "righe e colonne".
 
Solo che se supero le 60.000-70.000 righe, il controllo diventa 
lentissimo, praticamente la visualizzazione blocca il programma :-(((
Usando un altro tipo di controllo perderei la formattazione. O meglio 
dovrei formattare tutto io, ma certo se posso evitare... qualcuno sa 
come velocizzare le StringGrid?
 
In alternativa cosa posso usare che mi permetta di mantenere la 
struttura a righe e colonne senza dover fare tutto a mano?
 
Grazie


Potresti appoggiare il tutto su file e poi paginare. Puoi usare anche 
file di tipo text e usare un memo. Sarebbe anche più facile stamparlo.
Sempre che abbia capito bene il problema.
 
-- 
Trasformare i sudditi in cittadini è miracolo che solo la scuola può 
compiere. (Piero Calamandrei)
 
 

 lentissimo, praticamente la visualizzazione blocca il programma :-(((
 
ho appena popolato una grid con 100000 righe e non ho notato nessun 
rallentamento, sicuro che il problema non sia da un'altra parte?
 
 
 

 rallentamento, sicuro che il problema non sia da un'altra parte?
 
Ora che mi ci fai pensare, io inserisco le righe una per una. Se prima 
allargassi la stringgrid di N-mila righe per volta e poi ci mettessi le 
righe le cose cambierebbero? Provo.


a me è veloce anche così (versione c++ builder)
 
	for(int i = 0; i < 100000; i++)
	{
		StringGrid1->RowCount = i + 1;
		StringGrid1->Cells[0][i] = i;
		StringGrid1->Cells[1][i] = "0x00000000";
		StringGrid1->Cells[2][i] = "mov eax, ebx";
		StringGrid1->Cells[3][i] = "operatore";
	}
 
la formattazione dove la fai?

 righe le cose cambierebbero? Provo.
 
Non e' che hai customizzato qualche cosa con il draw custom ?
 
-- 
=============================================================
Alberto Rubinelli - Fondazione "Museo del computer" Onlus
Via Costantino Perazzi 22 - 28100 NOVARA - ITALY
Tel 0321 1856032   Fax 0321 391769   BBS 0321 392320
Mail: 
ne...@museodelcomputer.org
 
Web : 
www.museodelcomputer.org
 
=============================================================

 righe le cose cambierebbero? Provo.
 
Sicuramente, procedendo così come hai detto, noteresti senz'altro un miglioramento.
 
Detto questo, potresti agire in un altro modo: vedere la griglia come una "vista paginata" dei dati che devi mostrare, e quindi usare sempre un numero fisso di righe e colonne, pari all'area esatta visibile sullo schermo, e andare a selezionare un sottoinsieme di dati, quelli da mostrare in quell'area specifica della griglia.
 
Non so se sono riuscito a spiegare quello che intendo... la neve che ha ripreso a scendere mi ottenebra... :)
 
-- 
MARCO BREVEGLIERI
#Home: 
http://www.marco.breveglieri.name
 
#Blog: 
http://www.compilaquindiva.net
 


 
Sě, ho capito cosa intendi.
Perň quanto sarebbe veloce lo scrolling del listato, se dovessi inserire 
ogni riga e scrollare tutte le altre ogni volta che uno preme il tasto 
freccia giů? :-)
 
Tutto considerato ho deciso di usare un TMemo e scrivermi la logica di 
formattazione a parte, visto che probabilmente finirň per aggiungere 
commenti multiriga, cross-reference, intestazioni per le subroutine e 
altra roba che in una struttura righe-colonne faticherei a mettere.
 
Ora vedremo quali sono i limiti pratici del TMemo :-)

 Ora vedremo quali sono i limiti pratici del TMemo :-)
 
Non è un mistero o qualcosa da "scoprire": essendo un wrapper di un 
componente di windows, i suoi limiti sono ben documentati.
 
ACSH
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 formattazione. Usa il Richedit: è fatto apposta.
 
Secondo me, qualsiasi componente "predefinito" non è particolarmente adatto all'esigenza: in questi casi, data l'estrema variabilità dei requisiti per l'interfaccia di visualizzazione dei dati, forse conviene orientarsi su qualcosa di personalizzato o comunque "disegnato a mano". :|
