Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-09-2013, 22:58   #1
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
[C#] Popolamento progressivo datagridview

Ciao, ho necessità di popolare diverse dataGridView con migliaia e migliaia di record a partire da un database.
Al momento adotto un sistema che non tanto mi piace... prelevo i dati dal db, li metto in una datatable e successivamente li faccio visualizzare.
Sul pc in firma anche se ci sono oltre 20.000 righe il caricamento è istantaneo, ma basta andare a provare il software su un pc più "normale" ed un piccolo impuntamento iniziale si percepisce.

Altra nota dolente della mia soluzione è che non riempio la datatable in un thread in background, ciò comporta avere l'interfaccia del tutto bloccata fin quando non è andato il buon fine il prelievo dei dati.
Altro grossissimo problema è quando utilizzo un server mysql via internet per popolare il tutto, dove i tempi di attesa si prolungano per almeno 12-15 secondi durante i quali non si può fare nulla...

Avete qualche soluzione da proporre?

Grazie
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 08:59   #2
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da rizzotti91 Guarda i messaggi
Ciao, ho necessità di popolare diverse dataGridView con migliaia e migliaia di record a partire da un database.
Al momento adotto un sistema che non tanto mi piace... prelevo i dati dal db, li metto in una datatable e successivamente li faccio visualizzare.
Sul pc in firma anche se ci sono oltre 20.000 righe il caricamento è istantaneo, ma basta andare a provare il software su un pc più "normale" ed un piccolo impuntamento iniziale si percepisce.

Altra nota dolente della mia soluzione è che non riempio la datatable in un thread in background, ciò comporta avere l'interfaccia del tutto bloccata fin quando non è andato il buon fine il prelievo dei dati.
Altro grossissimo problema è quando utilizzo un server mysql via internet per popolare il tutto, dove i tempi di attesa si prolungano per almeno 12-15 secondi durante i quali non si può fare nulla...

Avete qualche soluzione da proporre?

Grazie
Beh, la soluzione l'hai citata pure tu. Genera la DataTable tramite una query in background (E magari nel mentre che esegui la query visualizzi una barra di caricamento continua), quindi al termine di essa imposti la DataSource della tabella con il DataTable appena generato.

L'infrastruttura per i Thread in C# è una goduria, e l'introduzione degli operatori await e async ha reso il tutto di una banalità unica (anche se è sempre meglio darsi una bella letta alla gestione delle operazioni asincrone prima dell'introduzione di questi operatori, per capire davvero come funziona il tutto).

Ultima modifica di [Kendall] : 30-09-2013 alle 09:02.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 12:33   #3
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Beh, la soluzione l'hai citata pure tu. Genera la DataTable tramite una query in background (E magari nel mentre che esegui la query visualizzi una barra di caricamento continua), quindi al termine di essa imposti la DataSource della tabella con il DataTable appena generato.

L'infrastruttura per i Thread in C# è una goduria, e l'introduzione degli operatori await e async ha reso il tutto di una banalità unica (anche se è sempre meglio darsi una bella letta alla gestione delle operazioni asincrone prima dell'introduzione di questi operatori, per capire davvero come funziona il tutto).
Ciao, ti ringrazio per la risposta.
Così facendo però avrò la datagrid popolata solo alla fine del prelievo dati, mi sarebbe piaciuto un qualcosa di progressivo..

Inviato dal mio GT-N7100 con Tapatalk 4
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 13:00   #4
totti240282
Senior Member
 
L'Avatar di totti240282
 
Iscritto dal: Feb 2002
Messaggi: 304
Anche se il vero Thread si fa senza quegli operatori, operazioni asincrone sono differenti da operazioni su altri Thread.
totti240282 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 13:50   #5
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da totti240282 Guarda i messaggi
Anche se il vero Thread si fa senza quegli operatori, operazioni asincrone sono differenti da operazioni su altri Thread.
Ni.

Non ho detto che gli operatori async e await SONO il multithreading, ma che l'introduzione degli stessi ha reso la gestione di più thread ancor più banale rispetto alla già semplificata struttura creata tramite i Task.

Il discorso poi è molto vasto e per nulla banale. Asincronia, Synchronization Context, generazione nuovi thread... Sono tutti argomenti che entrano in gioco, e appunto e tutto fuorchè banale.

Ultima modifica di [Kendall] : 30-09-2013 alle 14:00.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 17:00   #6
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
L'utilizzo della modalità virtuale della datagridview potrebbe essere una soluzione?
Come faccio a popolare una dataGridView in virtual mode a partire da un DB?
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 18:07   #7
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Intanto sto facendo delle prove per far si che il thread per il caricamento della dataTable venga eseguito in background però, sinceramente, non so come muovermi...

Al momento, nel form con la dataGrid, ho il richiamo ad un metodo da me creato:

Quote:
dataGrid.dataSource = CaricaDT(query, datatable);
Il metodo è così:
Quote:
Thread thread = new Thread(() => SvolgiDT(query, dt));
thread.Start();
while (thread.IsAlive)
{

}
return dt;
Quote:
dt.Clear();
try
{
Connection.Apri();
MySqlDataAdapter da = new MySqlDataAdapter(query, Connection.cnMySql);
da.Fill(dt);
Connection.Chiudi();
return dt;
}
catch (MySqlException)
{
MessageBox.Show("Errore!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
}
Il problema è che non ci ho concluso nulla così... la GUI si blocca quando carico la datagrid..
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 20:05   #8
Storti
Junior Member
 
Iscritto dal: Sep 2013
Messaggi: 24
Quote:
Originariamente inviato da rizzotti91 Guarda i messaggi
L'utilizzo della modalità virtuale della datagridview potrebbe essere una soluzione?
Per velocizzare la visualizzazione dei dati sì. Per il caricamento dal DB ovviamente no.
Storti è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 08:17   #9
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Se hai migliaia di record secondo me converrebbe comunque fare una paginazione della datagrid view... così facendo prelevi decisamente meno record da db diminuendo i tempi per visualizzare la pagina... io farei così Comunqe il threading rimana una soluzione valida ovviamente.
Oltretutto anche per l'utente che visualizza i dati sarebbe meglio, poi dipende dalle esigenze della tua applicazione.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 08:24   #10
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da Riordian Guarda i messaggi
Se hai migliaia di record secondo me converrebbe comunque fare una paginazione della datagrid view... così facendo prelevi decisamente meno record da db diminuendo i tempi per visualizzare la pagina... io farei così Comunqe il threading rimana una soluzione valida ovviamente.
Oltretutto anche per l'utente che visualizza i dati sarebbe meglio, poi dipende dalle esigenze della tua applicazione.
altra soluzione potrebbe essere il caricamento durante lo scrolling dei dati successivi, un po' come succede nei social network.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 12:29   #11
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Quote:
Originariamente inviato da Riordian Guarda i messaggi
altra soluzione potrebbe essere il caricamento durante lo scrolling dei dati successivi, un po' come succede nei social network.
Infatti é proprio questo che vorrei fare... E da quello che ho capito, la virtual mode serve proprio a questo. Inoltre vorrei che il caricamento avvenga comunque in un Thread separato, in modo da non bloccare mai la GUI. Qualcuno mi sa indicare come fare?

Inviato dal mio GT-N7100 con Tapatalk 4
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 14:05   #12
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
sono un po' a digiuno di windows form mi spiace, l'unica cosa che ti suggeisco è, se hai cos' tanti dati da prelevare da DB, di evitare di farlo con un unico accesso. Indipendentemente dal'utilizzo del thread o meno
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 23:58   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Consiglio anche io la paginazione.
Oggi sono 20.000 record, e se fra un anno sono 200.000 ? Lasci che il thread scarichi per 5 minuti intasando il DB ?
Aggiungo pure che
- piu' record sono piu' memoria occupano, e quindi il programma comunque rallentera'.
- se l'utente inoltre decide di riordinare l'elenco a meta' scaricamento l'effetto non e' piacevole
- una scrollbar per scorrere 20k e passa record e' praticamente inutile, a meno di non dotare tutti di monitor 80" in verticale.

Il riempimento progressivo mentre si scrolla non mi piace, non si capisce mai bene quanti dati ci sono e come navigarli. Va bene per i social network perche' comunque si tratta sempre e solo di dati ordinati temporalmente di cui ti importano solo gli eventi piu' recenti. Nessuno si mette a scrollare la pagina di facebook per pescare un post di due mesi fa...

La soluzione paginata non sara' molto "kool" ma secondo me la piu' efficace.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 19:52   #14
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Consiglio anche io la paginazione.
Oggi sono 20.000 record, e se fra un anno sono 200.000 ? Lasci che il thread scarichi per 5 minuti intasando il DB ?
Aggiungo pure che
- piu' record sono piu' memoria occupano, e quindi il programma comunque rallentera'.
- se l'utente inoltre decide di riordinare l'elenco a meta' scaricamento l'effetto non e' piacevole
- una scrollbar per scorrere 20k e passa record e' praticamente inutile, a meno di non dotare tutti di monitor 80" in verticale.

Il riempimento progressivo mentre si scrolla non mi piace, non si capisce mai bene quanti dati ci sono e come navigarli. Va bene per i social network perche' comunque si tratta sempre e solo di dati ordinati temporalmente di cui ti importano solo gli eventi piu' recenti. Nessuno si mette a scrollare la pagina di facebook per pescare un post di due mesi fa...

La soluzione paginata non sara' molto "kool" ma secondo me la piu' efficace.
Quoto tutto.. in effetti per una griglia la cosa migliore è la paginazione..
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 22:14   #15
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Ok, è la cosa migliore, ma come si realizza?
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 23:48   #16
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Stai usando windows forms ? (Non mi sembra che datagridview faccia parte di wpf, o no?)
Con C# per le gui ho usato solo silverlight per cui non ti posso dare un aiuto diretto con datagridview cmq l'idea di base e' questa:
una volta deciso il numero di record (N) da visualizzare alla volta, per visualizzare la pagina P devi prendere i record da (P-1)*N a P*N

Cpm SQL SERVER e' qualcosa tipo
Codice:
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY ??? ) AS RowNum, *
          FROM      MyTable
          WHERE     SOME_CONDITION
        ) AS Result
WHERE   RowNum >= START_RECORD -- (P-1)*N
    AND RowNum < END_RECORD -- P*N
Insomma non fai altro che mostrare un sottoset limitato di tutta la tabella
Avrai bisogno di qualche pulsante per gestire la navigazione (pagina successiva pagina precedente) che non fa altro che impostare il nuovo numero di pagina e aggiornare di nuovo il contenuto della datagrid in base al nuovo intervallo. Lavoro un po' noioso ma non difficile.

Forse c'e' qualcosa di gia' pronto per le windows forms, non so, cmq se cerchi datagridview pagination so google trovi diversi esempi gia' pronti.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-10-2013, 10:03   #17
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Prova a vedere, come diceva anche marco, se il controllo offre qualcosa di già pronto. Ai tempi un controllo simile che ho usato con asp.net, lo aveva, si settava qualche proprietà del controllo e avevi tutto praticamente gratis. Dubito che non l'abbiano fatto anche per windows form o l'abbiano levato.
In caso contrario ho trovato questo esempio... vedi se ti è utile http://www.codeproject.com/Articles/...iew-in-WinForm
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db

Ultima modifica di Riordian : 03-10-2013 alle 10:11.
Riordian è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v