Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582

    vb.net domanda su connessione e gc

    salve a tutti

    proprio ieri ero intento nel modificare il programma di un mio collega ,quando mi accorgo che a differenza di me, lui stabilisce una connessione al database nel form_load e la chiude nel form closed

    mentre io apro e chiudo nella classe

    gli ho chiesto se avesse mai avuto problemi, in quanto la garbage collection (per quel che ne sappia..ma forse sbaglio) elimina in automatico le variabili non usate
    la risposta è stata che nn ha mai sentito parlare di garbace collection, e la sua form riusciva a stare in piedi per + di venti minuti senza subire danni e rimanere sempre connessa...in + mi ha spiegato anche il motivo:
    il motivo è di persistenza dei dati, ogni volta che lui inseriva un record e subito dopo lo recuperava, aprendo e chiudendo la connessione nn se lo ritrovava mai, invece mantenendo la connessione sempre aperta, non appena scrive e rilegge subito dopo, si ritrova tutti i record!

    nn immaginerete la mia faccia!
    in effetti il suo programma risulta molto + veloce e funzionale, mentre i miei (che apro e chiudo in continuazione) sono lenti, e dopo aver scritto dei record mi tocca aspettare un po prima di rileggere

    dopo questa "breve" spiegazione vorrei sapere quale è il modo migliore, forse ho sbagliato io?

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Con quale database lavorate solitamente? I motivi delle differenze riscontrate possono dipendere da quello, e anche dalle classi utilizzate per accedere alla base dati.

    Ad ogni modo, prima di crucciarti, si dovrebbe analizzare a fondo la questione: il fatto che il programma del tuo collega sia più performante non significa che abbia fatto però le scelte migliori in assoluto...

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    è un db access

    e poi nn utilizza le classi bensi in ogni pulsante c'è il codice sia per insrire che per leggere..

    ed usa i datareader

    p.s.
    ancora sto piangendo
    anni ed anni di esperienza per capire come velocizzare un'applicazione e....un ragazzo alle prime armi la fa al primo colpo piu veloce della tua
    ecco xke ho inserito questo 3d (forse sbaglio io) ma voglio sapere xke
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Kahm
    è un db access
    Quindi immagino si acceda tramite la gerarchia System.Data.OleDb.

    Originariamente inviato da Kahm
    e poi nn utilizza le classi bensi in ogni pulsante c'è il codice sia per insrire che per leggere..
    Cosa significa? :master:

    Originariamente inviato da Kahm
    ed usa i datareader
    E' un po' generico, ma se si utilizzano i DataReader quando possibile, le performance sono senz'altro migliori.

    Originariamente inviato da Kahm
    p.s.
    ancora sto piangendo
    anni ed anni di esperienza per capire come velocizzare un'applicazione e....un ragazzo alle prime armi la fa al primo colpo piu veloce della tua
    ecco xke ho inserito questo 3d (forse sbaglio io) ma voglio sapere xke
    In primo luogo...benvenuto nel mondo reale.
    Non tutti abbiamo gli stessi ritmi e pertanto non ci si deve mai stupire che qualcuno, sebbene alle prime armi, non sia in grado di adoperare gli strumenti meglio di chi lo fa da anni, magari in modo sbagliato e perseguendo una strada abitudinaria che non è comunque quella corretta.

    In secondo luogo, hai scritto pochissimi dettagli per poter individuare le sostanziali differenze, a parte l'apertura e la chiusura delle connessioni.

    Oltre al DB utilizzato, si dovrebbe conoscere la gerarchia di classi adottata per accedervi, l'uso del connection pooling, cosa deve fare l'applicazione, se non ci sono controindicazioni a mantenere aperto il database, quanto sono ottimizzate le query eseguite contro il database stesso, con quale frequenza e così via.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5

    Re: vb.net domanda su connessione e gc

    Originariamente inviato da Kahm
    ...lui stabilisce una connessione al database nel form_load e la chiude nel form closed
    mentre io apro e chiudo nella classe
    Anche il codebehind dove il collega scrive le sue procedure e' una classe. Suppongo che tu intendi la tua classe come sinonimo di componente per l'accesso ai dati (che puo' essere una singola classe nello stesso progetto o una o piu' classi in una libreria esterna).
    gli ho chiesto se avesse mai avuto problemi, in quanto la garbage collection (per quel che ne sappia..ma forse sbaglio) elimina in automatico le variabili non usate
    la risposta è stata che nn ha mai sentito parlare di garbace collection, e la sua form riusciva a stare in piedi per + di venti minuti senza subire danni e rimanere sempre connessa...
    Il garbage collector e' un servizio che entra in funzione in automatico e ripulisce la memoria da tutti gli oggetti che non sono piu' referenziati dal codice e/o non mantengono aperte delle risorse (es. file, connessioni al db). Quando si parla appunto di connessioni al db bisogna andarci piu' cauti e il programmatore dovrebbe sempre preoccuparsi di chiudere esplicitamente le risorse occupate. Quindi, se tu o il tuo collega aprite una connessione e non vi preoccupate di chiuderla avete gli stessi identici problemi.
    Guardando piu' da vicino la tecnica del tuo collega, non e' da criticare e ha i suoi lati positivi. L'ho gia' vista proporre in altri tutorial nel passato (non ricordo quali). Si apre la connessione nel page_load e si puo' chiudere anche nel page_prerender. Personalmente non faccio cosi per il semplice motivo che la logica di accesso ai dati la separo in una libreria esterna al progetto web.
    il suo programma risulta molto + veloce e funzionale, mentre i miei (che apro e chiudo in continuazione) sono lenti, e dopo aver scritto dei record mi tocca aspettare un po prima di rileggere
    non credo che la differenza tra lo stesso codice spostato in un componente esterno alla pagina oppure messo nella pagina stessa possa avere una differenza cosi sensibile quindi credo che il tuo codice possa essere suscettibile di ottimizzazione. In piu' non e' che facendo come il tuo collega riesci a rileggere subito un record perche' la connessione e' rimasta aperta altrimenti devi aspettare "un po'". E' piu' una questione di metodologia. Mettere il codice di accesso ai dati in ogni web form con lunghe procedure negli eventi di ogni pulsante mi sembra un incubo se si tratta di un progetto grosso o destinato a diventarlo.
    Saluti a tutti
    Riccardo

  6. #6
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582

    Re: Re: vb.net domanda su connessione e gc

    Originariamente inviato da riccardone
    facendo come il tuo collega riesci a rileggere subito un record perche' la connessione e' rimasta aperta altrimenti devi aspettare "un po'". E' piu' una questione di metodologia. Mettere il codice di accesso ai dati in ogni web form con lunghe procedure negli eventi di ogni pulsante mi sembra un incubo se si tratta di un progetto grosso o destinato a diventarlo.
    ops scusa mi sono espresso male..sono ancora abituato a vb6
    quando parlo di classe intendevo proprio una classe esterna..o modulo di classe (per intenderci) in cui io nellla sub new apro la connessione e la chiudo con una sub :chiudiconnessione

    potresti spiegarmi proprio il concetto di aspettare un po?
    in effetti anche io ho notato che dovevo fare uno sleep(200), a volte anche di sleep(6000) in caso di tante insert, per recuperare un record inserito

    cmq se ho capito bene il garbace collector potrebbe chiudere la connessione se il form nn effettua nessuna operazione :master:
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  7. #7

    Re: Re: Re: vb.net domanda su connessione e gc

    Originariamente inviato da Kahm
    potresti spiegarmi proprio il concetto di aspettare un po?
    Mi hai frainteso. Nel precedente post volevo proprio dire che non si deve aspettare un po' per leggere le avvenute modifiche nel db.
    in effetti anche io ho notato che dovevo fare uno sleep(200), a volte anche di sleep(6000) in caso di tante insert, per recuperare un record inserito
    ti credo che poi hai un codice lento. Cmq, mai avuta la necessita di fare nessun sleep per poter leggere un record appena inserito.
    il garbace collector potrebbe chiudere la connessione se il form nn effettua nessuna operazione :master:
    Ho detto l'esatto contrario. Evito di quotarmi da solo e provo a ridirlo con qualche altra parola. Il gc, elimina tutti gli oggetti in memoria tranne quelli che tengono occupate risorse come ad esempio apertura di file o apertura di connessioni verso il db. Gli oggetti che tengono occupate risorse non vengono eliminati dal gc ed e' quindi lo sviluppatore che deve occuparsene.
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.