ListView - Info

lunedì 23 gennaio 2006 - 09.28

Ciciu Profilo | Senior Member

Ciao a tutti.

Virrei chiederVi alcuni consigli/pareri relativamente al componente in oggetto...

Ho creato un'applicazione che carica un listview con una serie di records, e li aggiorna ogni "n" secondi attraverso un thread...

1) Cosa faccio con l'oggetto "connection" ? Lo apro/chiudo ad ogni giro di update oppure ne apro una con il costruttore della main form e la mantengo per tutto il tempo di "vita" della form, distruggendola al termine ?

2) Volevo permettere all'utente di selezionare le colonne da visualizzare... Consideriamo i seguenti campi :

Codice
Nome
Cognome
eMail
Numero di telefono

Supponiamo che l'Utente decida di NON visualizzare l'eMail... Ho un menu contestuale che mi permette di inviare una Mail a questo contatto, prelevando l'indirizzo eMail dalla listview stessa... Cosa mi conviene fare ? Gestisco le colonne ed i subitems "aggiuntivi" (quelli che esistono ma non sono legati alle colonne - con tutti i problemi che comporta) oppure faccio il lookup del dato sul database nel momento in cui mi serve (in questo caso, però, al punto 1 dovrei tenere in vita la connessione...) ?

Nonostante io mi ritenga (e sia ritenuto) un programmatore piuttosto esperto, queste "nuove tecnologie" mi spiazzano, nel senso che, a volte, me ne sfugge l'aspetto strettamente logico...


Ciao a tutti
fg

Brainkiller Profilo | Guru

>1) Cosa faccio con l'oggetto "connection" ? Lo apro/chiudo ad
>ogni giro di update oppure ne apro una con il costruttore della
>main form e la mantengo per tutto il tempo di "vita" della form,
>distruggendola al termine ?

Ciao,
allora con .NET sono tornate di moda alcuni fondamentali importanti. Uno è quello di connettersi al database e tenere la connessione aperta il minor tempo possibile (e mi sembra normale) ed immagazzinare i dati in un DataSet (naturalmente se i dati sono tanti è meglio considerare altra strada). Per questo in ADO.NET si dice che si programma in modalità disconnessa. (Connessione a DB, recupero Dati e inserimento in DataSet, chiusura connessione, lavoro su Dataset).

Sulla tua domanda in particolare si può rispondere così, in .NET c'è un sistema di pooling degli oggetti per cui ogni qual volta tu crei una SqlConnection viene creato un Pool di connessioni. Ossia una serie di connessioni a disposizione della tua applicazione. Questo fa si che tu richiedi una connessione al Pool e lui te la restituisce. Il pool tiene in qualche modo attive le connessioni, di fatto aumentando la scalabilità dell'applicazione.

Quindi aprire numerose volte la connessione ha uno scarso impatto prestazionale grazie al Pool.
Se ti interessa sapere di più leggi sull'SDK questo capitoletto:
"Connection Pooling for the .NET Framework Data Provider for SQL Server"

>2) Volevo permettere all'utente di selezionare le colonne da
>visualizzare... Consideriamo i seguenti campi :

Anche in questo caso, come sopra.
Puoi immagazzinare i dati in un DataSet e fare un Lookup senza connessione a DB, puoi connetterti a DB, oppure inserire tutto in un array e se i dati sono tanti usare un BinarySearch().
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Ciciu Profilo | Senior Member

Ciao.

Ho letto il documento che hai menzionato nel Tuo post.

La mia applicazione (questa è piccola e banale...) e costituita da una sola form...

Ho dichiarato l'oggetto "connessione" tra le variabili (private) della classe.
Ho codificato un metodo (privato) che si occupa di aprire la connessione ed uno che si occupa di chiuderla.
Esiste un metodo (UpdateList)che apre la connessione (con il metodo di cui sopra), aggiorna la ListView e chiude la connessione (con il metodo di cui sopra).
Lo stesso metodo viene richiamato periodicamente da un thread (quindi apre/chiude la connessione).

Quando ho bisogno di risalire ad un campo non contemplato nella ListView, vado a cercarlo sul DB, aprendo/chiudendo la connessione.

In pratica, la connessione è sempre la stessa (i parametri di connessione non cambiano) e la variabile che la rappresenta è dichiarata nella classe della form.

Capisco che la descrizione sia molto generica, ma... cosa ne pensi ? Ti sembra qualcosa di ottimizzabile ?

Ciao - fg



Fabio G

Brainkiller Profilo | Guru

>Capisco che la descrizione sia molto generica, ma... cosa ne
> pensi ? Ti sembra qualcosa di ottimizzabile ?

Se hai letto il documento, sia che fai uso di una istanza di Connection sia che usi un Pool puoi aprire e chiudere la connessione quante volte vuoi.

C'è da preoccuparsi invece sul tipo di query che richiami, che sia ottimizzata quella o la stored procedure relativa, che recuperi un set di dati non enorme e che sia rapida nel recupero dei dati dal database.

In sè la connessione non crea molti problemi se l'applicazione è così piccola. Il problema si porrebbe con sistemi che gestiscono migliaia di transazioni sul database ma non è il tuo caso.
ciao


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5