Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    ASP.NET Postbcak lento se ADSL non prestazionale

    Ciao a tutti,
    ho sviluppatto un piccolo crm che genere delle offrte in asp.net utlizzando vs2010

    Ho il seguente problema, quando l'utente seleziona un articolo da una dropdownlist in alcune text compaiono i dati dell'articolo scelto, nome, prezzo di listino, prezzo unitario, l'utente può inserire uno sconto o maggiorazione in una text e quando perde lo stato attivo richiamo una routine che mi controlla tramite 3 banalissime query sul db se lo sconto o maggiorazione è permesso oppure no.
    Questo controllo in locale è istantaneo (nemmeno 1 secondo), mentre quando carico il sito online risulta molto lento, a volte impiega anche ben 8 secondi!

    Ho pubblicato l'applicazione su un server di aruba, ho chiesto a loro supporto e questo è quello emerso:
    -gli ho fatto fare le mie stesse identiche prove e per loro il postback risulta istantaneo e senza dover aspettare 8 secondi (loro mi hanno assicurato che hanno fatto il test con una rete esterna da dove è ospitato il server utilizzando un ADSL da 8 mb)
    -io ho fatto le prove sia dal mio cliente che nel mio ufficio, entrambi abbiamo una adsl da 10mb e il postback risulta molto lento
    -per scrupolo ho fatto la prova a casa di un mio amico che abita nel paese a fianco al mio e che per fortuna sua ha già la fibra ottica e il postback risulta immediato.
    -ho fatto una prova collegando il mio pc alla rete del mio cellulare che è oltre i 20 mb e il postback risulta veloce!

    Non so più in che modo risolvere questo problema, ho escluso un problema di antivirus perchè le prove che ho fatto ho sempre usato lo stesso portatile con lo stesso antivirus, l'unica cosa che cambiava era l'ADSL!!!!

    E' possibile che se uno non ha una fibra ottica il post back sia così tanto lento? ripeto ben 8 secondi!!!

    Qualcuno ha delle idee da suggerirmi??

    Di seguito vi posto il codice della pagina, la funzione OnSelectedIndexChanged2 è quella che controlla che il prezzo non sia stato scontato o maggiorato troppo.

    Ho provato anche a eseguire la routine cancellando le 3 query per vedere se fosse un problema di collegamento a sql server, ma il risultato non cambia...

    Accetto qualsiasi consiglio, sto diventando pazzo!!!

    Grazie

    Ciao

    codice:
    Protected Sub OnTextChanged2(ByVal sender As Object, ByVal e As EventArgs)
            Dim txt As TextBox = DirectCast(sender, TextBox)
            Dim ID As String = ""
    
            lbl_error.Text = ""
    
            Dim C As Integer
            Dim sTmp As String = ""
            For C = 0 To Len(txt.ID)
                If IsNumeric(Mid(txt.ID, C + 1, 1)) Then
                    sTmp = sTmp & Mid(txt.ID, C + 1, 1)
                End If
            Next
    
            ID = sTmp
    
            Dim txt1 As TextBox = Master.FindControl("MainContent").FindControl("listino" & ID)
            Dim txt2 As TextBox = Master.FindControl("MainContent").FindControl("sconto" & ID)
            Dim txt3 As TextBox = Master.FindControl("MainContent").FindControl("maggiorazione" & ID)
            Dim txt4 As TextBox = Master.FindControl("MainContent").FindControl("netto_unt" & ID)
            Dim txt5 As TextBox = Master.FindControl("MainContent").FindControl("riepilogativo_unt" & ID)
    
            Dim listino As Double
            Dim maggiorazione As Double
            Dim sconto As Double
    
            If IsNumeric(txt1.Text) Then
                listino = txt1.Text
            Else
                listino = 0
            End If
    
            If IsNumeric(txt2.Text) Then
                sconto = txt2.Text
            Else
                sconto = 0
            End If
    
            If IsNumeric(txt3.Text) Then
                maggiorazione = txt3.Text
            Else
                maggiorazione = 0
            End If
    
            txt4.Text = listino - (((listino) / 100) * sconto) + (((listino) / 100) * maggiorazione)
            txt5.Text = listino - (((listino) / 100) * sconto) + (((listino) / 100) * maggiorazione)
    
    
    
    
    
    
            Dim ddl_ctl As DropDownList = Master.FindControl("MainContent").FindControl("ddl_articolo" & ID)
            Dim riepilogativo_unt_ctl As TextBox = txt5
            Dim combo_ctl As DropDownList = Master.FindControl("MainContent").FindControl("ddl_articolo" & ID)
    
            If ddl_ctl.SelectedValue = "" Then
                lbl_error.Visible = "True"
                lbl_error.Text = "Devi selezionare l'articolo"
                Exit Sub
            End If
    
            If riepilogativo_unt_ctl.Text = "" Then
                Exit Sub
            End If
    
    
            'CONTROLLO IL PREZZO RIEP UNT SIA MAGGIORE UGUALE AL LISTINO
    
            Dim listino_ctl As String = ""
    
            Select Case ddl_Listino.SelectedValue
    
                Case "PR"
                    listino_ctl = "PR"
    
                Case "1"
                    listino_ctl = "2"
    
                Case "2"
                    listino_ctl = "2"
    
                Case "11"
                    listino_ctl = "12"
    
                Case "12"
                    listino_ctl = "12"
    
                Case "21"
                    listino_ctl = "22"
    
                Case "22"
                    listino_ctl = "22"
    
                Case "31"
                    listino_ctl = "32"
    
                Case "32"
                    listino_ctl = "32"
    
                Case "36"
                    listino_ctl = "37"
    
                Case "37"
                    listino_ctl = "37"
    
                Case "41"
                    listino_ctl = "42"
    
                Case "42"
                    listino_ctl = "42"
    
            End Select
    
            Dim SQL As String
            Dim Sqlconn As New SqlConnection(ConfigurationManager.ConnectionStrings("dbConnectionString_usa").ToString)
            Try
                Sqlconn.Open()
    
                If europa.Value = "1" Then
                    SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='" & listino_ctl & "'"
                Else
                    SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='" & listino_ctl & "'"
                End If
    
                Dim ctl_listino As Boolean = True
    
                Dim cmd As New SqlCommand
                cmd.Connection = Sqlconn
                cmd.CommandText = SQL
                Dim dr As SqlDataReader = (cmd.ExecuteReader)
    
    
                If dr.HasRows Then
                    'si sposta ciclicamente attraverso i record e visualizza i valori.
                    Do While dr.Read
    
    
                        If riepilogativo_unt_ctl.Text < dr("Price") Then
                            lbl_error.Visible = "True"
                            lbl_error.Text = "Riepilogativo unt. pi&ugrave; basso del Listino associato"
                            Exit Sub
                        End If
    
                        ctl_listino = True
    
                    Loop
    
    
                End If
    
                dr.Close()
    
                cmd.Dispose()
    
                If ctl_listino = False Then
                    If europa.Value = "1" Then
                        SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
                    Else
                        SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
                    End If
    
    
                    cmd = New SqlCommand
                    cmd.Connection = Sqlconn
                    cmd.CommandText = SQL
                    dr = cmd.ExecuteReader
    
    
                    If dr.HasRows Then
                        'si sposta ciclicamente attraverso i record e visualizza i valori.
                        Do While dr.Read
    
                            If riepilogativo_unt_ctl.Text < dr("Price") Then
                                lbl_error.Visible = "True"
                                lbl_error.Text = "Riepilogativo unt. pi&ugrave; basso del Listino associato"
                                Exit Sub
                            End If
    
                        Loop
    
    
                    End If
    
                    dr.Close()
                    cmd.Dispose()
    
    
    
                End If
    
    
    
    
    
                'CONTROLLO CHE IL PREZZO NON SIA SUPERIORE AL LISTINO PR
                If europa.Value = "1" Then
                    SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
                Else
                    SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
                End If
    
    
                cmd = New SqlCommand
                cmd.Connection = Sqlconn
                cmd.CommandText = SQL
                dr = cmd.ExecuteReader
    
    
                If dr.HasRows Then
                    'si sposta ciclicamente attraverso i record e visualizza i valori.
                    Do While dr.Read
    
                        If riepilogativo_unt_ctl.Text > dr("Price") Then
                            lbl_error.Visible = "True"
                            lbl_error.Text = "Riepilogativo unt. pi&ugrave; alto del Listino PR"
                            Exit Sub
                        End If
    
                    Loop
    
    
                End If
    
                dr.Close()
                cmd.Dispose()
    
            Catch ex As Exception
                FailureText.Text = ex.Message
                Exit Sub
            Finally
                Sqlconn.Close() 'chiude la connessione
                Sqlconn.Dispose() 'rilascia le risorse
                SqlConnection.ClearPool(Sqlconn) ' pulisce il pool delle connessione associate all'oggetto connection 
            End Try
    
    
    
        End Sub

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Penso di aver capito il problema,
    ho due dropdown list dove carico in una tutti i clienti e in un altra tutti gli articoli, ho provato a far caricare solo 1 cliente e 1 articolo e il postaback è istantaneo.
    Molto probabilmente quando si esegue il post back e ricarica le dropdown, se hanno troppi elementi e l'adsl non è molto veloce, impiega più tempo.

    Per ovviare a questo problema domani provo a togliere il dropdownlist e inserire la text dove appena si scrivono le prime lettere, compaiono i suggerimenti sotto, un po come google.
    Non l'ho mai utilizzato questo componente, avete dei suggerimenti da darmi?

    Grazie

    Ciao

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Per controllare la quantità di dati che la pagina invia e riceve coi postback io uso il Firebug (plugin per firefox): nel tab Net ti mostra i tempi di caricamento delle varie parti della pagina.

    Il componente di cui parli si chiama autocomplete extender: io uso questo http://www.ajaxcontroltoolkit.com/Au...oComplete.aspx
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Quote Originariamente inviata da androita Visualizza il messaggio
    Penso di aver capito il problema,

    Non l'ho mai utilizzato questo componente, avete dei suggerimenti da darmi?
    le dropdown le devi caricare solo la prima volta, non ad ogni postback

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Quote Originariamente inviata da djciko Visualizza il messaggio
    le dropdown le devi caricare solo la prima volta, non ad ogni postback
    è proprio quello che faccio, le crico solo una volta, ma a quanto pare se ci sono troppi elementi nelle dropdown, queste rallentano il postback della pagina

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    beh hai provato quanto tempo ci mette la query in Management studio ?
    magari e' fatta male quella, o non ci sono gli indici sulle tabelle...

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Pardon ma di quanti record stiamo parlando? Intendo che se la scelta di un cliente o di un articolo la devi fare da un elenco (dropdown) con 50k righe mi sa che la dropdown non è il controllo più adatto per quello che devi fare... molto meglio un textbox con l'autocomplete extender
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Ciao a tutti,
    non � un problema di query lenta, ma del controllo dropdown che deve contenere tante righe, per gli articoli sono quasi 50k, infatti avevo pensato di utilizzare l'autocomplete extender ma sto trovando non poche difficolt�...

    Il mio problema � che la query che devo inviare all'autocomplete deve essere parametrizzata e ho trovato il seguente link https://www.aspsnippets.com/Articles...ontextKey.aspx dove mi spiega bene come passare un parametro, e questo problema l'ho risolto

    Un altro problema � che quando inizio a scrivere un nome di un cliente, compaiono i vari suggerimenti, se faccio click su un determinato cliente, dovrebbero comparire in una dropdown un elenco delle persone di riferimento del cliente (max 5 righe, non di pi�), ma quando si attiva il postback il valore della text non � l'intera ragione sociale, ma solo le prime lettere che avevo digitato!

    Esempio:
    se inizio a scrivere "PIP" nella mia text e poi faccio click sul suggerimento "PIPPO" quando si attiva il postback ed eseguo la query che trova le persone riferimento di quel cliente, il valore della text non � "PIPPO" ma � "PIP"!
    L'evento che richiama la funzione che esegue la query delle persone di riferimento � onblur

    Ho provato a disattivare l'evento onblur ed eseguire la query da un button e cos� funziona.... vi posto il codice...

    codice:
    <script type="text/javascript">
    <!--
        function confirmation() {
            
                document.getElementById('<%= Button9.ClientID %>').click();
           
        }
    //-->
    </script>
    
    <div class="demo">
                                            <div class="ui-widget">
                                            <label for="tbAuto">Enter UserName: </label>                                        
                                            <input type="text" id="txtSearch" onblur="return confirmation();" runat="server" class="autosuggest" />
                                                <asp:Button ID="Button9" runat="server" Text="Button" />
                                            </div></div>

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Altri hanno avuto il mio stesso problema, in questo forum https://forums.asp.net/t/2090298.asp...h+Autocomplete hanno risolto mettendo un ritardo alla funzione onblur... ho modificato la funziona java codì

    codice:
    <script type="text/javascript">
    <!--
        function confirmation() {
    
            setTimeout(function () { document.getElementById('<%= Button9.ClientID %>').click(); }, 600);
           
        }
    //-->
    </script>
    e per il momento sembra funzionare tutto...

    Grazie per il supporto

    Ciao

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