Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Aiuto !!!

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    5

    Aiuto !!!

    Scusate la franchezza ma ho un grosso problema di comprensione sulle problematiche legate alle prestazioni di asp.net. Abbiamo sviluppato (con grosse fatiche) un'applicazione asp.net, adesso però che viene messa on-line su un server interno all'azienda abbiamo grosse difficoltà di prestazioni. Vorrei chiedere a Voi che siete sicuramente più esperti le seguenti cose :

    1. Quando viene fatta una select (sql server 2000) quale metodo si deve utilizzare? (dataset o datareader)

    2. E' meglio utilizzare viste di sqlserver oppure fare le query direttamente sul codice?

    3.Cosa ne pensate di questo codice ? E' ottimizzato per selezionare 5.000/10.000 righe e mostrarle su una griglia?

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

    strParametro_Codice = Request.QueryString("Codice")
    strParametro_CodiceContatto = Request.QueryString("CodiceContatto")

    ' Recupero parametri e formazione query
    strQuery = ""
    strQuery = strQuery & " SELECT * "
    strQuery = strQuery & " FROM qy_Prodotti "
    strQuery = strQuery & " WHERE "
    strQuery = strQuery & " Descrizione LIKE '%" & clsFormattazione.subLeggiControllo_ScriviSQL(Descr izione) & "%' "
    strQuery = strQuery & " ORDER BY DescrizioneProdottoSettore, DescrizioneGruppo, DescrizioneCategoria, DescrizioneSottocategoria, Descrizione "

    If Page.IsPostBack Then
    ' Recupero dati della lista
    clsComponenti.subCaricaDataGrid_ConDataSet(Lista, strQuery, ConfigurationSettings.AppSettings("StringaConnessi one"))
    End If

    End Sub

    4. Dove posso trovare documentazione sull'ottimizzazione del codice ?

    5. Abbiamo fatto un file xml per contenere le parole nelle diverse lingue (per gestire l'applicazione multilingua), all'interno dell'applicazione, quando devo mostrare una maschera richiamo la funzione :

    ' Classe che si occupa di gestire il multilingua
    Public Class clsMultilingua

    Public Shared Function Leggi(ByVal strCodiceParola As String, ByVal strFilePercorso as string) As string
    dim strCodiceLingua as string
    dim strFileNome as String

    ' Recupera il percorso del file
    strFilePercorso = System.Web.HttpContext.Current.Server.MapPath(strF ilePercorso)

    ' Carica il file XML
    dim objFile as New XmlDataDocument()
    objFile.Load(strFilePercorso)

    ' Recupera il codice della lingua
    ' (è una SESSION appartenente alla configurazione)
    strCodiceLingua = HttpContext.Current.Session("CodiceLingua")

    Select Case strCodiceLingua
    Case "0"
    strCodiceLingua = "Lingua_Italiana"

    Case "1"
    strCodiceLingua = "Lingua_Inglese"

    Case "2"
    strCodiceLingua = "Lingua_Francese"

    Case "3"
    strCodiceLingua = "Lingua_Spagnola"

    Case "4"
    strCodiceLingua = "Lingua_Tedesca"
    End Select

    Dim objNodo As XmlNode
    Dim strOutput As String

    objNodo = objFile.selectSingleNode("//vocabolario/" & strCodiceLingua & "/parola[@id='" & strCodiceParola & "']")

    If Not objNodo Is Nothing Then
    strOutput = objNodo.InnerXml.ToString()
    else
    strOutput = "[Errore di configurazione lingua]"
    End If

    return strOutput

    End Function

    End Class

    Questa procedura può rallentare notevolmente l'applicazion ?

    Scusate per tutte le domande, ma siamo veramente disperati, lunedì prossimo dovremmo andare in linea ma con queste prestazioni non so se potremo farlo.
    Aggiungo che il server è un Pentium4 con 512 MB Ram e un hard disk da 120Gb il S.O. è Windows 2003.
    Ancora grazie per le risposte che arriveranno.

  2. #2
    1. Quando viene fatta una select (sql server 2000) quale metodo si deve utilizzare? (dataset o datareader)
    Dal punto di vista delle performance, il DataReader è sicuramente la scelta migliore.

    2. E' meglio utilizzare viste di sqlserver oppure fare le query direttamente sul codice?
    L'utilizzo di stored procedure è assolutamente consigliato.

    3.Cosa ne pensate di questo codice ? E' ottimizzato per selezionare 5.000/10.000 righe e mostrarle su una griglia?
    Sono parecchi record.
    Ti consiglio di ricorrere alla paginazione lato server.
    Fai poi uso della cache per memorizzare la tua sorgente dati.
    Qualche appunto sul codice:

    codice:
    // Istanzia un oggetto string. Sconsiglito.
    Dim strQuery As String = ""
    // Forma corretta
    Dim strQuery As String = String.Empty
    
    // Stessa cosa (vedi sopra)
    strQuery = strQuery & " SELECT * "
    strQuery = strQuery & " FROM qy_Prodotti "
    
    // Utilizza la classe StringBuilder
    Dim sb As System.Text.StringBuilder
    sb.Append("SELECT * FROM qy_Prodotti WHERE ")
    sb.Append("ecc ecc")
    Per ciò che concerne la lingua, dai un'occhiata qui:
    http://msdn.microsoft.com/library/it...ngWebForms.asp

    Dato che l'applicazione, a quanto ho capito, mi sembra parecchio complessa, cerca di strutturare una vera e propria soluzione n-tier.
    Un esempio assolutamente esplicativo, funzionante e ben documentato, lo trovi al seguente link:

    http://www.dotnetcircle.it/firenze05.aspx
    (scarica gli allegati, soprattutto quello relativo alla Business Logic)

    Certo, il codice da scrivere è parecchio, ma i vantaggi sono inquantificabili.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    5
    Ciao naighes,
    grazie per la solerte risposta, stiamo analizzando le tue risposte, e volevo chiederti a riguardo se mi davi delucidazioni riguardo la paginazione lato server, cosa intendi e come la devo impostare ?

    Grazie ancora.

  4. #4
    Dai un'occhiata al seguente link:
    http://blogs.aspitalia.com/rickyvr/p...SQLServer.aspx
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  5. #5
    Prima di mettere in cache 5.000 / 10.000 righe da una fonte dati ci penserei non una volta ma mille.

    Utilizzare le stored procedures è sicuramente corretto, tuttavia non è stata fornita una risposta completa. Utilizzare una stored procedures su una vista che, per essere completata, interroga 20 tabelle non è certo la scelta migliore. Per questo io consiglierei a misanet di effettuare una analisi prima di buttarsi direttamente sul codice.

    In primis, organiziamo il database in modo corretto, cercando di dislocare le informazioni in appropiati punti logici. Eseguire queste operazioni più ridurre drasticamente la lunghezza , e quindi il tempo d'esecuzione, di comandi T-SQL lanciati dalle applicazioni ASP.NET.

    In secondo è possibile applicare il lancio di stored procedures, che, se scritte a modo possono anche loro giocare un importante ruolo nella sfida al così definito Application Tuning.

    Inoltre, chiamando una stored procedure con l'oggetto System.Data.SqlClient.SqlCommand sarebbe corretto applicare anche un CommandBehavior (cosa che quasi tutti ignorano). Scopo di questa operazione è quello di avere un maggiore controllo e minore problematiche relative allo stato di connessione e carico di risorse.

    Condivido pienamente l'utilizzo di una paginazione lato server, tuttavia sei così sicuro che sia necessario caricare tutti i 5.000/10.000 record e poi mostrarli a video attraverso la paginazione? In base allo stato del server e del database questa operazione potrebbe richiederti molto tempo. Io ti proporrei di richiedere i dati di cui hai bisogno solo al momento in cui ne hai la reale necessità. Mi spiego meglio, nel momento in cui l'utente chiede la prima pagina potresti richiedere al database solo i dati che compongono quella pagina, successivamente per ogni pagina puoi richiedere i dati mancanti che compongono la seconda e così via.

    Ciao e buona fortuna

  6. #6
    Originariamente inviato da Jc_
    Prima di mettere in cache 5.000 / 10.000 righe da una fonte dati ci penserei non una volta ma mille.
    Non mi sembrava di aver invitato misanet a mettere in cache tutti quegli elementi. Ho citato l'oggetto Cache come buona soluzione per la persistenza di dati, non volevo certamente dire a misanet di crearsi la propria Cache Framework Library. Al momento, credo che debba ocuparsi di curare aspetti meno avanzati della sua formazione.

    Originariamente inviato da Jc_
    Utilizzare le stored procedures è sicuramente corretto, tuttavia non è stata fornita una risposta completa.
    In primis, organiziamo il database in modo corretto, cercando di dislocare le informazioni in appropiati punti logici. Eseguire queste operazioni più ridurre drasticamente la lunghezza , e quindi il tempo d'esecuzione, di comandi T-SQL lanciati dalle applicazioni ASP.NET.
    Apprezzo molto gli sforzi che stai compiendo per dare completezza alle mie risposte, ma non avevo intenzione di scrivere all'interno di un post il manuale di SQL SERVER.
    Da una rapida occhiata al codice che ha postato misanet ho semplicemente dedotto che, quest'ultimo, avrebbe fatto meglio a curare ben altri aspetti nella sua applicazione prima di cimentarsi in operazioni più complesse.
    Comunque, come certamente avrai avuto modo di notare, ho postato un link contenente un'applicazione n-tier completa e posso garantirti che il dominio dei dati della soluzione in questione è realizzato con tutti i crismi.

    Originariamente inviato da Jc_
    Condivido pienamente l'utilizzo di una paginazione lato server, tuttavia sei così sicuro che sia necessario caricare tutti i 5.000/10.000 record e poi mostrarli a video attraverso la paginazione?
    Il fatto che tu condivida il mio consiglio sulla paginazione lato server mi lusinga, ma il fine di quest'ultima è proprio quello di utilizzare query che prelevano un set di dati contenuto...
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  7. #7
    Ciao naighes,
    per prima cosa complimenti per il contributo che stai dando a questo forum.

    Scopo del mio reply era quello di aggiungere qualche informazione alla tua già ottima risposta, in modo tale da dare una visuale quasi a 360° all'autore del post su una possibile soluzione.

    Ancora complimenti e sono spiacente se il mio reply ti ha causato qualche problema.

    Bella

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    [a little OT] Naighes, tu c'eri a firenze al RCDay ? [/a little OT]

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 © 2026 vBulletin Solutions, Inc. All rights reserved.