Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Performance de pagina en .Net (https://www.clubdelphi.com/foros/showthread.php?t=42378)

fer21unmsm 12-04-2007 21:59:57

Performance de pagina en .Net
 
Hola compañeros de club, tengo un problemita con las páginas web creadas en .Net, lo que pasa es que se demoran mucho en cargar osea como 8 a 10 segundos, pero esto el usuario lo puede tolerar, pero el verdadero problema radica en los callbacks que se utilizan para obtener información especifica del server sin que haga un postback de toda la página, bueno les comento que este callback se demora igual que la carga de la página, es decir 8 a 10 segundos (hago un parentesis para decir que la demora de la pagina creo que es normal porque hay bastantes cosas, tambien he probado con las paginas de microsoft hechas en .net y se demoran igual) soy un poco ignorante en este tema de programación web en .Net (mi primera vez) por eso no sé si es normal que el callback se demore en retornar la info en 8 a 10 segundos, especificamente se trata de un combo que al seleccionar un proveedor obtiene del sever la dirección y telefono, se supone que al seleccionar el proveedor del dropdownlist debe mostrar rápidamente la dirección y telefono, ¿a que se puede deber, es normal, como puedo hacer para que no pase eso (sea rapido)?

Ah por si acaso la pagina la he optimizado lo mas que pude (no hace ningun postback, salvo cuando guarda la info, he deshabilitado varios viewstates, etc), el servidor es un xeon no se de cuanto pero es bien potente (asi como yo, jeje:p), y mi conexión a internet es "rápida" de 1mb

Espero su opinión acerca de esta duda

Gracias de antemano
Espero que la comunidad siga creciendo como siempre lo han hecho:)
Saludos cordiales.

mamcx 12-04-2007 22:43:18

Pues MUY raro.

ASP.NET es lento al cargar la primera vez pero de ahi en adelante la cosa anda bien...

Y mas en un xeon...

Ya hiciste un profiling para ver donde esta la lentitud?

Y no diste nada de info como:

- Version de .NET
- Que tipo de OS (WinXP,Win2003)
- Si es en IIS o cassini o...
- base de datos, cantidad de registros, etc...
- Cantidad de usuarios...

Y un ejemplo de codigo no caeria mal...

fer21unmsm 13-04-2007 01:24:49

Cita:

Empezado por mamcx
Pues MUY raro.

ASP.NET es lento al cargar la primera vez pero de ahi en adelante la cosa anda bien...

Y mas en un xeon...

Ya hiciste un profiling para ver donde esta la lentitud?

Y no diste nada de info como:

- Version de .NET
- Que tipo de OS (WinXP,Win2003)
- Si es en IIS o cassini o...
- base de datos, cantidad de registros, etc...
- Cantidad de usuarios...

Y un ejemplo de codigo no caeria mal...

Gracias por contestar mamcx

Si ya hice un profile con el sql y no veo nada raro, salvo lo siguiente: al momento de seleccionar un proveedor con el dropdownlist se demora un poco desde que el cliente le envía la info(se demora como 8 segundos) porque de allí el servidor lo procesa rapido y devuelve el resultado (es decir la dirección y el telefono)

si disculpa que no haya dado la información respectiva (ya decia yo que faltaba algo más :p) aquí te la doy:

- Utilizo el framework 2.0
- mi Ide es Visual Studio 2005
- Mi SO cliente es Windows XP Professional con SP2
- Mi SO servidor es Windows Server 2003 Standard Edition con SP1
- Utilizo el IIS
- Microsoft SQL Server 2000 Enterprise
- La cantidad de registro es muy poco por ahora (800)
- Un sólo usuario conectado

Aquí envío una parte del código también

ChangeDlstShipper: es una función que sirve para obtener la dirección y telefono del shipper seleccionado

Código:

Partial Class new_ship_inst_cs
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler

    Private iObjParamCount As Integer
    Private bSwValid As Boolean = False
    Private _callbackArgument As String

    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
        Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent

        Dim UOAdress, UOPhone As String
        Dim stVal() As String
        UOAdress = ""
        UOPhone = ""

        If dlstShipper.ID = Right(eventArgument, Len(eventArgument) - InStr(eventArgument, "ª")) Then
            ChangeDlstShipper(Left(eventArgument, InStr(eventArgument, "ª") - 1), UOAdress, UOPhone)
            _callbackArgument = txtShipAddress.ClientID & "º" & UOAdress & "ª" & txtShipperPhone.ClientID & "º" & UOPhone
        ElseIf dlstConsignee.ID = Right(eventArgument, Len(eventArgument) - InStr(eventArgument, "ª")) Then
            ChangeDlstShipper(Left(eventArgument, InStr(eventArgument, "ª") - 1), UOAdress, UOPhone)
            _callbackArgument = txtConsAddress.ClientID & "º" & UOAdress & "ª" & txtConsPhone.ClientID & "º" & UOPhone
        End If

        stVal = Split(eventArgument, "ª")
        If dlst_fact_ship_inst_cs.ID = stVal(1) Then
            _callbackArgument = stVal(0)
        End If

    End Sub

Código:

    Public Function GetCallbackResult() As String Implements _
        System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return _callbackArgument
    End Function

DataManaged es una clase que he generado para manejar data, es decir operaciones con el sql como storeprocedures, consultas, etc. Para el caso del código de abajo instancio un objeto de esta clase para poder llamar al método m_addNewItem (crea los parametros y ejecuta el storeprocedure pasado como parámetro)

m_addNewItem(<nombre_del_store_procedure>, <tipo_de_comando>, <lista_de_parametros_SP>, <numero_parametros>, <bit_indica_si_tiene_parametros_de_retorno>)

"Alexim_SIConnectionString": es la cadena de coneccion

Código:

    Protected Sub ChangeDlstShipper(ByVal ItemUO As String, ByRef UOAdress As String, ByRef UOPhone As String)
        Dim ObjStProc As New DataManaged("Alexim_SIConnectionString")
        Dim stParams As String
        Dim stResult As String

        Try


            stParams = "nvDom_prin_un_opª16ª200ª2¬" & _
            "nvCod_pais_fono_tip_contacª16ª10ª2¬" & _
            "nvCod_area_fono_tip_contactª16ª10ª2¬" & _
            "nvFono_tip_contactª16ª15ª2¬" & _
            "nvIdUOª16ª10ª1ª" & ItemUO 'CType(sender, DropDownList).SelectedValue
            stResult = ObjStProc.m_addNewItem("up_GetPhoneAddressUO", 4, stParams, 5, 1)

            UOAdress = Split(stResult, "¬")(0)
            UOPhone = Split(stResult, "¬")(1) & Split(stResult, "¬")(2) & "-" & Split(stResult, "¬")(3) 'ObjParameter(2).Value.ToString & ObjParameter(3).Value.ToString & "-" & ObjParameter(4).Value.ToString

            ObjStProc.Dispose(1)
        Catch ex As Exception
            Me.lbl_error.Text = "ha surgido el siguiente error: " & ex.Message
        End Try
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Genera script para el callback de dlstShipper
        Dim cm As ClientScriptManager = Page.ClientScript
        Dim cbReference As String

        cbReference = cm.GetCallbackEventReference(Me, "arg +'ª'+ valor", _
            "ReceiveServerData", "") ' & "Objeto"

        Dim callbackScript As String = ""

        callbackScript &= "function CallServer(arg, valor)" & _
            "{" & cbReference & "; }" ', Objeto
        cm.RegisterClientScriptBlock(Me.GetType(), _
            "CallServer", callbackScript, True)

        dlstShipper.Attributes.Add("onchange", "CallServer(document.getElementById('" & dlstShipper.ClientID & "').value, '" & dlstShipper.ID & "');return false;")
        dlstConsignee.Attributes.Add("onchange", "CallServer(document.getElementById('" & dlstConsignee.ClientID & "').value, '" & dlstConsignee.ID & "');return false;")

        Dim csOtro As ClientScriptManager = Page.ClientScript
        Dim cbOtro As String

        cbOtro = csOtro.GetCallbackEventReference(Me, "arg +'ª'+ valor", _
            "ReceiveServerDataOtro", "") ' & "Objeto"

        Dim callbackScriptOtro As String = ""

        callbackScriptOtro &= "function CallServerOtro(arg, valor)" & _
            "{" & cbOtro & "; }" ', Objeto
        csOtro.RegisterClientScriptBlock(Me.GetType(), _
            "CallServerOtro", callbackScriptOtro, True)

        dlst_fact_ship_inst_cs.Attributes.Add("onchange", "CallServerOtro(document.getElementById('" & dlst_fact_ship_inst_cs.ClientID & "').value, '" & dlst_fact_ship_inst_cs.ID & "');return false;")
    End Sub

voy a realizar otro post con el código comentado y más código, disculpen las molestias

Gracias de antemano

Saludos cordiales.

mamcx 13-04-2007 16:38:38

Ok...

Hace un rato que no trabajo con .NET en asp.net (estoy con mobiles ahora) asi que me he oxidado un poco.

Me podrias decir que es DataManaged? Un busqueda en google por ".net 2.0 DataManaged" no me arroja resultados.

Si es una clase tuya o de algun framework, podrias reemplazar, solo por probar, con una llamada usando una datareader?

Si esta correcto "nvDom_prin_un_opª16ª200ª2¬"? Con esos caracteres raros?

Aunque si dices que en Sql la cosa anda bien, me gustaria que verificaras con el datareader y en base a eso formulamos un camnio para resolver...

fer21unmsm 13-04-2007 20:18:52

Gracias por responder, mamcx

ya lo probé con datareader, pero pasa lo mismo.

Gracias de antemano

Saludos

mamcx 13-04-2007 21:02:58

Tenes un http module por ahi que pudiera interferir?

Como sea, una forma de aliviar la situacion es usando cacheado de datos. Podrias cachear la lista que necesitas, busca sobre ASP.NET caching...

fer21unmsm 13-04-2007 21:11:18

Ok voy a revisar lo del cacheado, de ahi te cuento

gracias

fer21unmsm 17-04-2007 00:56:42

Bueno, una buena solución que he encontrado a mi problema, es separando cada sección de mi pagina en varias paginas incrustadas en frames (para que se muestre como una sola) + callbacks, y el problema se solucionó, ya que el radicaba en que habia muchos componentes en la pagina (por necesidad)

Saludos cordiales
:D


La franja horaria es GMT +2. Ahora son las 15:59:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi