699 messaggi dal 18 febbraio 2002
www.dimsolutions.it
Applicazione C# Webforms, Ho un ListView che mostra i prodotti sul catalogo paginati di 30 records.
La Paginazione avviene direttamente sulla QUERY mediante LIMIT e OFFSET del database MySQL.

I dati della query vengono inseriti in un Dataset che viene associato tramite DataBind al ListView con questa routine:

       ListViewProduct.DataSource = loadDataset(....);
       ListViewProduct.DataBind();

        public DataSet loadDataset(DataSet dataset, string queryString)
        {
            MySqlConnection conn        = null;
            MySqlDataAdapter command    = null;

            try
            {
                conn = new MySqlConnection();
                conn.ConnectionString = connstring;
                conn.Open();

                command = new MySqlDataAdapter(queryString, conn);
                command.Fill(dataset, "Risultati");
            }
            catch (Exception e)
            {
                // scrivo log
                Log.CreateLogFiles();
                Log.ErrorLog("Errore non previsto: loadDataset Descrizione: " + e.Message + " qry: " + queryString);
            }
            finally
            {
                if (command != null) { command.Dispose(); command = null; }
                if (conn.State == ConnectionState.Open) { conn.Close(); conn = null; }
            }

            return dataset;
        }


Non ho per il momento problemi di performance ma mi chiedo se è possibile ottimizzare in qualche modo(tipo qualche impostazione sul Dataset o utilizzare DataTable) senza stravolgere troppo il codice. Lo so che utilizzando il DataReader è più veloce ma non vorrei per il momento riscrivere parte dell'applicazione.

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
beh, se vuoi utilizzare DataTable puoi usare il suo metodo Fill e passargli direttamente un DataReader. Così puoi evitare di creare un MySqlDataAdapter. Comunque credo che i vantaggi prestazionali non saranno apprezzabili dall'utente. L'unica cosa che modificherei è questa riga.
if (conn.State == ConnectionState.Open) { conn.Close(); conn = null; }

La sostituirei semplicemente così:
conn.Dispose();


Infatti è importante chiamare il Dispose in modo che il provider possa distruggere le risorse unmanaged. Il Close viene invocato implicitamente, come puoi vedere dal codice sorgente del provider.

ciao,
Moreno

Enjoy learning and just keep making
699 messaggi dal 18 febbraio 2002
www.dimsolutions.it
Grazie,

per quanto riguarda l'associazione sul controllo ListView adesso avviene con <%#Eval("NomeCampoDB")%>

<asp:Literal id="lbId" visible="false" text='<%#Eval("Id")%>' runat="server"></asp:Literal>



posso ottimizzare questa cosa non so con una qualche conversione in String oppure va bene così?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.