none
Datareaders Vs DataSet ¿Porque tanta diferencia de tiempo en usar uno u otro método de acceso a datos? RRS feed

  • Pregunta

  • Hola

    Estoy haciendo pruebas de viabilidad sobre cual es la manera más acertada de consumir datos.

    He usado un data reader para leer dos tablas tipo maestro /detalles de 70.000 y 600.000 elementos contra SQL Server 2008 y el consumo de tiempo en segundos ha sido 20 segundos, los datos se han cargado  en dos objetos DataTable.

    He vuelto a hacer lo mismo pero a través de un DataSet y el consumo de tiempo en obtener la misma información ha sido de 39 segundos (el doble).

    Hay una diferencia significativa entre ambos métodos de acceso a la BBDD

    ¿Alguien sabría decirme porqué?

    Tengo un idea de lo que puede estar pasando pero primero prefiero oir otras opiniones.

    Gracias por vuestro tiempo
    Julio Trujillo Leon. Microsoft Certified Professional. .NET Developer and TFS admin. . Please, if my contribution is useful for you press on "useful button" Por favor, si les ha sido útil pulsen en "el mensaje ha sido útil" .
    lunes, 30 de noviembre de 2009 10:44

Todas las respuestas

  • hola


    Contrasting the ADO.NET DataReader and DataSet

    Why I Don't Use DataSets in My ASP.NET Applications


    igual puedo comentarte algunos puntos de vista de ambas tecnologias de conexion a la db

    - el DataReader es orientado a la conexion, o se mantiene un cursor a la db para poder leer los registro y es necesario mantener la conexion durante esta operacion
    En cambio el DataSet es orientad a la no conexion, por eso este puede en un breve lapso cargar los datos y mentenerlos en memoria pues tiene justamente al dataset como contenedor

    - el DataReader es potimo para lecura secuencia, en cambio una vez carga el dataset estre peude ser recorrido y filtrado sin problemas ya que los datos estan en memoria

    - el dataset puede serialziarse y enviarse en un servicio web, o sea puede ser usado como objeto de transporte entre capas, en cambio el datareader no puede pasarse, hay que usar otor medio ya sean clases custom o listas, para cargarlas con los datos leidos de la db, para que ahi si puedan ser serializadas

    o sea en la lectura secuancial al datareader no hay quien le gane, ya que este mantiene un cursos a la db, pero tiene el problema que por defecto no permite el acceso de dos cursosres anidados, salbo que habilites MARS en la conexion
    en cambio el dataset debe crear todo un enviromente de matadata para poder definir la estructura de objetos que requiere cierto procesamiento que lo hace menos optimo para una lectura en bloque, cuando esta contiene muchos registros como es en este caso.


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de noviembre de 2009 13:33
  • Para ponerlo un poco mas sencillo:

    El datareader es metodo conectado, osea lee ha medida que avance el codigo en el que lo uses, sea un while y por ende las sentencias que conlleve cada lectura.

    En cambio con el dataset, es metodo desconectado, ya que carga toda la info desde la base al dataset(memoria) y las operaciones se las realiza sobre esta copia de los datos.

    Espero haberte aclarado un poco las cosas.
    • Propuesto como respuesta Erik David jueves, 23 de mayo de 2013 16:49
    • Votado como útil Erik David jueves, 23 de mayo de 2013 16:49
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:01
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:01
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:01
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:01
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:01
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:01
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:01
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:02
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:02
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:23
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:23
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:23
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:23
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:23
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:23
    • Votado como útil Gore83 martes, 19 de julio de 2016 15:23
    • Propuesto como respuesta Gore83 martes, 19 de julio de 2016 15:23
    jueves, 3 de diciembre de 2009 3:32