Grazie Luca per i costruttivi contributi che stai fornendo, senza dubbio di utilità anche a chi farà ricerche sul tema nel tempo a seguire.Aggiungi:
se vuoi vedere il "caricamento in azione".B4X:CLV1.Add(p,"") Sleep(0) '<--- Next
Proprio per questo ho messo lo Sleep(0) dopo l'aggiunta di un nuovo panel (item), in modo che tu veda subito la creazione, anziché vederli comparire tutti e 20 solo al termine del caricamento.Quello che intendo come rallentamento è un lasso di tempo molto inquietante dal momento che premo il tasto click e il momento che appaiono le 20 righe della tabella!
Non è una seplice questione di performance ma il fatto di contare fino a 3 (o fino a 2) prima che appaia qualcosa!
Scuola di programmazione disinteressata l'accetto ben volentieri ma a nome di tutti, scuola di vita proprio no! Chiaro?
Un saluto a tutti.
Beh, là si fa l'errore di voler caricare 1200 elementi tutti insieme! Erel ha giustamente suggerito di usare il "lazy loading".una discussione del 2018 che rigurada questo tema:
Allego un progettino in cui uso la tua routine che crea l'item da codice e un'altra che lo carica da layout.mentre in quel thread tu affermi che sia più veloce creando l'item nel codice anziché caricarne un layout (c'è una tua routine di esempio).
Allego un progettino in cui uso la tua routine che crea l'item da codice e un'altra che lo carica da layout.
Lancialo in modalità Release; noterai che al primo caricamento dei 40 item, la tua routine risulta leggermente più lenta rispetto al caricamento del layout (ripetendo l'operazione i tempi sembrano uguali). Se non noterai differenza è perché il tuo smartphone è molto probabilmente più veloce del mio; in questo caso, raddoppia il numero di item da caricare oppure lancialo in modalità debug.
Nota anche quanto sia più semplice e breve la routine di creazione dell'item.
For count=1 To 1000
If Mode = "ByCode" Then
CLV1.Add(Add_row_Filippo(count, Width, Height), count)
Else
CLV1.Add(Add_row_Layout(count, Width, Height), count)
End If
Sleep(0)
Next
Probabilmente perché si avvia un caricamento prima ancora che venga completato il precedente.Come mai dal secondo caricamento in poi, gli item vengono tutti scombussolati e non nell'ordine del caricamento?
Aggiunto il Wait For e caricato 100 item come indicato da @amorosik (in un ciclo e con testo uguale all'indice di questo).Probabilmente perché si avvia un caricamento prima ancora che venga completato il precedente.
Essendoci uno Sleep servirebbe un Wait For,
Anche se ci fosse un minimo vantaggio nei tempi di caricamento creando l'item da codice, e non è così, quanto è più sintentica e pulita la routine che crea l'item caricando un layout! Siete d'accordo, spero; e immaginate se contenesse più di quelle tre View!
per me 1.000€ non mi offendo.Grazie veramente di cuore a tutti!
Ritengo che l'argomento sia stato trattato in modo esauriente ed è sufficente così.
Un ultima informazione, volendo ringraziare in forma tangibile, premendo su quei tastini con su scritto [Donate], quale cifra può essere adeguata per non essere interpretata come possibile offesa?
Si, scusa ho sbagliato valuta.intendevi £ vero????
Per così poco (aiuto) non vale nemmeno la pena che sprechi un clickUn ultima informazione, volendo ringraziare in forma tangibile, premendo su quei tastini con su scritto [Donate], quale cifra può essere adeguata per non essere interpretata come possibile offesa?
Sarebbe la stessa cosa, perché quel codice dello script o lo metti là o lo scrivi nel sorgente, deve comunque essere eseguito.Avete provato con un layout un po'complesso e, soprattutto, che contenga uno script iniziale? Per esempio
Eh sì, ma non si può; senza contare che all'interno della creazione di un item della xCLV normalmente riempi anche le View con dei valori ed è qui che queste vengono distinte dalle altre (degli altri item).Premetto che trovo molto comodo il LoadLayout (così come la PreferenceDIalog abbinata al FormsBuilder), ma troverei "più furbo" effettuare il load una sola volta (tanto poi si ripete identico), caricarne il risultato in una "cache" ed utilizzare quest'ultima per popolare la CLV. Tanto per evitare i continui accessi al file di layout (che essendo contenuto nel DirAssets in effetti risiede nel .jar)
Ebbene si! Hai trovato la chiave del mistero! ?????@Gnappos
Ho provato il tuo esempio e sul mio dispositivo gli elementi appaiono istantaneamente.
Aggiungere 20 elementi non può richiedere tempo (nel caso poi della semplicità dei tuoi).
Nel Layout principale tra le proprietà della XCLV metti a 0 anche Insert Animation.
Ma sono proprio dettagli.
Domanda:
i tuoi Test li fai in modalità Debug o Release?
Le prestazioni reali di una app vanno sempre verificate in Release.
Ebbene si! Hai trovato la chiave del mistero! ?????
Finora non ho mai notato differenze tra DEBUG e RELEASE, figurati se per una manciata di righe di codice potevo supporre una così ABBISSALE DIFFERENZA di tempi di risposta tra debug e release!!! Invece con la xCLV la vedo in modo eclatante tant'è vero che avevo con grande rammarico deciso di non poterla usare.
E' bastato passare alla release come da Te suggerito e tutto funziona come atteso, cioè in modo istantaneo!
Questo spiega anche il fatto che una parte di noi vede il problema ed un altra no, hanno tutti ragione!
Accidenti che sgrugnata! (Damn what a blow to the face.)!