Foros del Web » Programación para mayores de 30 ;) » .NET »

Qué es más rápido

Estas en el tema de Qué es más rápido en el foro de .NET en Foros del Web. Buenas, después de mucho tiempo. Quería proponer lo siguiente, a ver cuál de las opciones piensan que que puede tener una respuesta más rápida: OPCION ...
  #1 (permalink)  
Antiguo 10/06/2010, 03:32
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 2 meses
Puntos: 9
Qué es más rápido

Buenas, después de mucho tiempo.
Quería proponer lo siguiente, a ver cuál de las opciones piensan que que puede tener una respuesta más rápida:

OPCION 1
Código vb.net:
Ver original
  1. Public Function Lista1() As DataTable
  2.                 Dim sSQL As String = "SELECT * FROM Clientes"
  3.                 Dim dA As New SqlDataAdapter(sSQL, Conn)
  4.                 Dim dS As DataSet
  5.                 dA.Fill(dS, "Clientes")
  6.                 Return dS.Tables("Clientes")
  7.             End Function
OPCION 2
Código vb.net:
Ver original
  1. Public Function Lista2() As List(Of DetallesCliente)
  2.                 Dim sSQL As String = "SELECT * FROM Clientes"
  3.                 Dim cM As New SqlCommand(sSQL, Conn)
  4.                 Dim misClientes As New List(Of DetallesCliente)
  5.                 Dim miCliente As DetallesCliente
  6.                 Conn.Open()
  7.                 Dim dR As SqlDataReader = cM.ExecuteReader
  8.                 While dR.Read
  9.                     miCliente = New DetallesCliente
  10.                     miCliente.Id = dR("Id")
  11.                     miCliente.Nombre = dR("Nombre")
  12.                     miCliente.Apellidos = dR("Apellidos")
  13.                     misClientes.Add(miCliente)
  14.                 End While
  15.                 Conn.Close()
  16.                 Return misClientes
  17.             End Function

Muchas gracias por sus opiniones.
Saludos.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 10/06/2010 a las 03:37
  #2 (permalink)  
Antiguo 10/06/2010, 03:46
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 2 meses
Puntos: 606
Respuesta: Qué es más rápido

Respuesta: Segunda opción

Motivo: El uso de lectura secuencial que le quieres dar al resultado de la select es el funcionamiento optimo de un DataReader. Un DataSet es más lento ya que, además de tardar más en construirse que un DataReader, tendrá en todo momento todos los valores en memoria.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 10/06/2010, 04:12
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 2 meses
Puntos: 9
Respuesta: Qué es más rápido

Hola Malenko!
Te agradezco tu rápida respuesta.
La verdad es que prefiero esa opción.
Te hago un par de preguntas más respecto a tu respuesta:

Cita:
Iniciado por Malenko Ver Mensaje
Un DataSet es más lento ya que, además de tardar más en construirse que un DataReader, tendrá en todo momento todos los valores en memoria.
La verdad es que en el caso del DataReader, de acuerdo con que será más rápido que usar DataSet, pero al final, también tendrá en todo momento los valores en memoria. Si te fijas, lo que hago es ir construyendo una lista de objetos Cliente, que finalmente será lo que devuelva la función. Aun así, ¿sigues viendo más rápido este método?

Y otra pregunta:
Finalmente, voy a utilizar lo que devuelva la función como DataSource de un GridView. ¿No hay problema en asignar un "List (Of DetallesCliente)" como DataSource de un DataGrid?
¿El rendimiento será el mismo o mejor que si el DataSource fuera un DataTable?

Gracias por todo!
Saludos.
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 10/06/2010, 04:23
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 2 meses
Puntos: 606
Respuesta: Qué es más rápido

Cita:
Iniciado por moNTeZIon Ver Mensaje
La verdad es que en el caso del DataReader, de acuerdo con que será más rápido que usar DataSet, pero al final, también tendrá en todo momento los valores en memoria. Si te fijas, lo que hago es ir construyendo una lista de objetos Cliente, que finalmente será lo que devuelva la función. Aun así, ¿sigues viendo más rápido este método?
Es diferente. Tu quieres comparar la velocidad de adquisición de los datos. Y mientras que el DataSet los ha de obtener y mantener todos en memoria, el DataReader solo ha de tener una fila en memoria cada vez. Se tendría que ver cuanta memoria te ocupa la lista generada, pero diria que ocupará menos la lista, además de que le puedes meter mano. Pero vamos, a nivel de velocidad (tu pregunta inicial) gana el DataReader.

Ojo, esto te lo he comentado viendo únicamente esa función. Dependiendo del uso que le quieras dar luego a esos valores te puede interesar (o no) utilizar mejor un dataset. Peeeeeeeero viendo esto otro....

Cita:
Iniciado por moNTeZIon Ver Mensaje
Y otra pregunta:
Finalmente, voy a utilizar lo que devuelva la función como DataSource de un GridView. ¿No hay problema en asignar un "List (Of DetallesCliente)" como DataSource de un DataGrid?
¿El rendimiento será el mismo o mejor que si el DataSource fuera un DataTable?

Gracias por todo!
Saludos.
Casi te recomendaría mejor usar la primera opción, aunque puedes hacer el binding a la lista sin ningún problema.

Te paso un link que quizás te saque de dudas o te genere más :P

http://msguayaquil.com/blogs/julioc/...taReaders.aspx
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 10/06/2010, 05:20
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 2 meses
Puntos: 9
Respuesta: Qué es más rápido

Vaya! Ya me tenías casi convencido con la segunda opción.
Pero leyendo ese artículo, creo que me quedo con la primera!
Gracias por todo.
Saludos.
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 10/06/2010, 07:12
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 2 meses
Puntos: 606
Respuesta: Qué es más rápido

Cita:
Iniciado por moNTeZIon Ver Mensaje
Vaya! Ya me tenías casi convencido con la segunda opción.
Pero leyendo ese artículo, creo que me quedo con la primera!
Gracias por todo.
Saludos.
Claro, pero es que son dos preguntas diferentes:
- Que es más rápido? --> La 2a opción
- Que te conviene más por el uso que le vas a dar? --> La 1a opción

Y es que lo más rápido no es siempre lo mejor. Sino que se lo digan a las chicas
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 10/06/2010, 08:21
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 2 meses
Puntos: 9
Respuesta: Qué es más rápido

Pero entonces, veamos.
Sin tener que hacer más cosas que mostrar los resultados en un GridView, asignandole un DataSource, podría utilizar la segunda opción?
La verdad es que no necesito más que eso.
También voy a necesitar, por ejemplo, utilizar el evento CellFormatting (para WinForms) y RowDataBound (para WebForms) para realizar algunos cambios en los datos, justo antes de mostrarse, etc...
Sin salirse demasiado de estos parámetros, ¿sería aconsejable utilizar la segunda opción?
__________________
..:: moNTeZIon ::..

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:34.