Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB 2005] Popolamento datagridview lentissimo

    Ciao ragazzi,

    sono passato da poco a sviluppare applicazioni da VB6 a VB2005.
    Dopo i primi entusiasmi nel vedere che alcune cose erano diventate davvero comode, anche rispetto alla precedente piattaforma .NET mi sono scontrato con alcuni bachi piuttosto notevole.

    Ultimo, ma a mio parere gravissimo baco, la popolazione di una datagridview con binding.
    E' paurosamente lenta, anche togliendo tutte le opzioni di autosize della griglia stessa, il popolamento e quindi la visualizzazione della griglia stessa è lentissima anche con poche righe, intorno alle 700 e 6 colonne.
    Potrete immaginarvi quindi quando si tratta di riordinare in base ad una colonna una griglia con 10000 record.

    Guardando in giro per il web, oltre a disattivare tutti le opzioni di autosizing, viene suggerito di annullare tutti i tipi di refresh della griglia stessa durante il popolamento in questo modo:
    codice:
    DataGridView1.SuspendLayout()
    Me.BindingSource1.RaiseListChangedEvents = False
    Me.TableAdapter1.Fill(Me.DataSet1.Table)
    Me.BindingSource1.RaiseListChangedEvents = True
    Me.BindingSource1.ResetBindings(False)
    DataGridView1.ResumeLayout()
    I risultati mettono tristezza: per una griglia di 700 righe il tempo impiegato a visualizzarla è intorno ai 2 secondi: inaccettabile.
    Non ho un computer scheggia ma nemmeno una schifezza: Pentium 4 con 512 MB RAM e 2.82 Ghz.
    Speravo che i problemi sussistessero solo in fase di debug ma anche con l'applicazione compilata e installata il risultato non si discosta molto.

    Infine sono arrivato a leggere questo articolo:
    http://connect.microsoft.com/VisualS...dbackID=115301

    Voi sapete qualcosa al riguardo?

    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  2. #2
    Sono d'accordo con te, sto VB2005 fa pena, ed ancora non hai visto il peggio.
    Comunque devi fare ricorso ai trucchi, io farei cosi:
    quando comincia a caricare il datagrid fai apparire un mesage box con un messaggio di attesa, per esempio: "aspettate che sto cesso di VB2005 finisca di caricare il db" poi quando ha finito, un altro messaggio (opzionale) di questo tipo: "grazie per la vostra pazienza, ho sbagliato tool di sviluppo". In questo modo l'utente non spaca tutto per l'impazienza e capisce che non è colpa dello sviluppatore.
    Ovviamente i messaggi devono essere leggermente più eleganti di quelli che ti ho proposto.

    salutoni

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

    Re: [VB 2005] Popolamento datagridview lentissimo

    Originariamente inviato da Gianluca Frati
    Ciao ragazzi,

    sono passato da poco a sviluppare applicazioni da VB6 a VB2005.
    Dopo i primi entusiasmi nel vedere che alcune cose erano diventate davvero comode, anche rispetto alla precedente piattaforma .NET mi sono scontrato con alcuni bachi piuttosto notevole.

    Ultimo, ma a mio parere gravissimo baco, la popolazione di una datagridview con binding.
    E' paurosamente lenta, anche togliendo tutte le opzioni di autosize della griglia stessa, il popolamento e quindi la visualizzazione della griglia stessa è lentissima anche con poche righe, intorno alle 700 e 6 colonne.
    Potrete immaginarvi quindi quando si tratta di riordinare in base ad una colonna una griglia con 10000 record.

    Guardando in giro per il web, oltre a disattivare tutti le opzioni di autosizing, viene suggerito di annullare tutti i tipi di refresh della griglia stessa durante il popolamento in questo modo:
    codice:
    DataGridView1.SuspendLayout()
    Me.BindingSource1.RaiseListChangedEvents = False
    Me.TableAdapter1.Fill(Me.DataSet1.Table)
    Me.BindingSource1.RaiseListChangedEvents = True
    Me.BindingSource1.ResetBindings(False)
    DataGridView1.ResumeLayout()
    I risultati mettono tristezza: per una griglia di 700 righe il tempo impiegato a visualizzarla è intorno ai 2 secondi: inaccettabile.
    Non ho un computer scheggia ma nemmeno una schifezza: Pentium 4 con 512 MB RAM e 2.82 Ghz.
    Speravo che i problemi sussistessero solo in fase di debug ma anche con l'applicazione compilata e installata il risultato non si discosta molto.

    Infine sono arrivato a leggere questo articolo:
    http://connect.microsoft.com/VisualS...dbackID=115301

    Voi sapete qualcosa al riguardo?

    il framework è di natura piu' lento rispetto al vb6
    beh certo, forse si tratta anche di come carichi la griglia, pero' la base è sempre il framework,

    cmq secondo me ci sono piu' vantaggi che svantaggi
    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
    Brutus 1234,
    ho utilizzato la tua tecnica.



    Però ho fatto in questo modo:
    Principalmente il problema l'ho su un form che però è quello che verrà utilizzato più spesso e solo raramente i dati all'interno di questo form verranno aggiornati.
    Quindi all'apertura del programma carico il form (con visualizzato un messaggio a scelto di quelli che mi hai proposto tu) e lo nascondo.
    codice:
    Private Sub frmOrdine_closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        e.Cancel = True
        Me.Hide()
        frmMenu.Focus()
    End Sub
    Quindi durante l'utilizzo dell'applicazione faccio in modo che non sia possibile chiudere il form catturando l'evento di chiusura e nascondendo lo stesso form:
    codice:
     MyForm.Hide
    In questo modo lo posso far riapparire in modo istantaneo all'occorrenza.
    codice:
     MyForm.Show
    Io penso che questa soluzione possa andare.

    Però sto analizzando anche la possibilità del multi threading, ovvero popolare il form mentre l'utente da dell'altro.

    Molto interessante...

    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

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.