PDA

Ver la Versión Completa : Performance de pagina en .Net


fer21unmsm
12-04-2007, 21:59:57
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
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


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


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


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