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,580

    [vb.net} caricare in listview 4000 recprd (velocizzare )

    salve a tutti
    dovendo caricare 4000 record in una listview, è logico tenere a conto delle prestazioni, quando apro il reader ci mette poco, il punto critico è caricare la listview (ci mette anche 15 secondi)
    io utilizzo questo codice preso da msdn

    codice:
       comando = New OdbcCommand
            comando.CommandType = CommandType.Text
            comando.CommandText = strsql
            comando.Connection = myconnection
    
            lettore = comando.ExecuteReader
    
            ' lst.Visible = False
            While lettore.Read
                With lettore
                    litem = lst.Items.Add(.Item("CodArticolo"))
                    Sitem = litem.SubItems.Add(.Item("Descrizione") & "")
                    Sitem = litem.SubItems.Add(.Item("CodiceArticolo") & "")
                End With
            End While
    in che modo posso velocizzare il tutto?
    ho notato che esistono diversi modi di caricare la listview, c'è un modo piu rapido?
    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,463
    Credo che il problema principale sia dovuto alla natura del controllo ListView stesso, molto più pesante rispetto ad altri controlli puramente grafici come il DataGrid.

    Tra l'altro, si tratta di un controllo ActiveX, pertanto l'uso nel .NET Framework è particolarmente aggravato dal Platform Invoke, cioè dal passaggio da ambiente "gestito" ad ambiente "non gestito".

    Suggerirei di usare un altro controllo o ricercarne uno simile nelle funzionalità, ma eventualmente basato su codice intermedio.

    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,580
    http://addressof.com/blog/archive/2003/11/13/274.aspx

    http://msdn.microsoft.com/archive/en...vw/default.asp

    in questi 2 link si parla di una listview particolare (virtual listview)in grado di raccogliere un'ernorme mole di dati in modo veloce

    solo che la ho provata ma nn mi carica niente""
    altro controllo?
    mah per le funzioni che devo dare , ho solo la listview in grado di rispndere
    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
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,580
    ok ci sono riuscito il codice è questo

    codice:
      While lettore.Read
                '   '  With lettore
                '
                With lst.Items.Add(lettore("CodArticolo") & "", 1)  '
    
                                   .SubItems.Add(lettore("Descrizione") & "")
                    
                End With
            End While
    a caricare 10.000 articoli da un semplice ciclo for ci mette 2 secondi, peccato che usando un datareader il tempo è identico ad una comunissima listview,
    quel che penso io è che per passare da un record ad un'altro ci mette un po di tempo(nonostante il datareader sia veloce) e cio implica sul tempo di caricamento della lista , quindi 20 secondi per 4.000 record
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,580
    conosci un modo per rendere il caricamento + veloce?

    usare oggetti disconnessi pensi che serva a qualcosa?
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    puoi usare un DataSet e far ritornare tutti i dati, un po' come il GetRows di ado. Il ciclo non lo fai sul recordset, con controllo ad ogni iterazione dell'eof, il movenext (automatico ma viene fatto). La lettura dovrebbe essere molto più veloce, almeno prima con GetRows era tantissimo più veloce, in .net non ho ancora sperimentato
    Ans.

  7. #7
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,580
    potrebbe essere un'idea
    appena ho tempo provo
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

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.