lo mas rapido para extraer 10 strings de BBDD

22/12/2003 - 22:43 por Carla | Informe spam
Hola a todos,
necesito extraer 10 cadenas que estan en una columna(esto es importante,no
estan en una fila, sino ya se que podria usar GetValues()), para copiarlas a
un array.el rendimiento es fundamental por lo que he pensado en implementar
un DataReader.La cosa es que para copiarlo a un array necesito recorrerlo 1
por 1 y copiarlo a mano, y resulta que despues el array tengo que recorrerlo
en mi aplicacion.He pensado en pasarle directamente al metodo el dataReader
y que lo recorra el mismo, pero tambien necesito que se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que tenga de parametro un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo

Preguntas similare

Leer las respuestas

#1 Sergio Acosta
22/12/2003 - 23:49 | Informe spam
Hola Carla,

En principio, me parece que lo mas adecuado para sacar de la base de datos
el conjunto de cadenas si es un SqlDataReader por que es la forma mas
eficiente de hacerlo.

Pero, ¿En verdad es tan necesario ahorrarte la conversión del DataReader al
arreglo? Es decir, si en efecto son 10 elementos ¿que tan costoso es
realizar un recorrido para convertirlo a areglo?.

No lo pregunto por que no crea que tu problema sea real, pero me gustaría
saber más del contexto. ¿Ese procesamiento sobre 10 cadenas lo vas a
ejecutar muchas veces seguidas?, ¿sobre diferentes conjuntos de cadenas?.

Mi recomendación sería hacer el método que acepte un arreglo, y hacer un
arreglo a partir de los registros del DataReader. Es lo mas sencillo y no sé
si efectivamente ya haz hecho mediciones de que va a tardar mucho mas si
haces la conversíón al arreglo, yo no lo creo, pero te repito, depende de el
contexto.

un saludo

Sergio
"Carla" wrote in message
news:
Hola a todos,
necesito extraer 10 cadenas que estan en una columna(esto es importante,no
estan en una fila, sino ya se que podria usar GetValues()), para copiarlas


a
un array.el rendimiento es fundamental por lo que he pensado en


implementar
un DataReader.La cosa es que para copiarlo a un array necesito recorrerlo


1
por 1 y copiarlo a mano, y resulta que despues el array tengo que


recorrerlo
en mi aplicacion.He pensado en pasarle directamente al metodo el


dataReader
y que lo recorra el mismo, pero tambien necesito que se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que tenga de parametro


un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo


Respuesta Responder a este mensaje
#2 Anonimo
23/12/2003 - 09:18 | Informe spam
hola Sergio,antes de nada gracias por contestar
La verdad que lo he pensado y creo que si voy a hacerlo
asi,copiarlo primero manualmente.aunque hiciera lo de
IEnumerator,despues tendria que volver a hacer una
conversion hacia arriba hacia DataRecord para volver a
extraerlo, asi que seguramente tardaria mas tienes razon.

Lo unico es que en mi clase cliente tendre que recibir el
DataReader (no podre hacer que mi componente de acceso a
datos procese el Reader y me devuelva un array ya que el
reader va a almacenar mas columnas) con lo cual ah atare
minimanente mi aplicacion a que acepte un
Reader,OledbDataReader en este caso.si cambio el gestor
de BBDD tambien tendre que modificar la aplicacion
cliente.Pero esto son tonterias, y es cierto, si quieres
rapidez no lo puedes tener todo.

Te agradezco la ayuda,Un saludo
Hola Carla,

En principio, me parece que lo mas adecuado para sacar


de la base de datos
el conjunto de cadenas si es un SqlDataReader por que es


la forma mas
eficiente de hacerlo.

Pero, ¿En verdad es tan necesario ahorrarte la


conversión del DataReader al
arreglo? Es decir, si en efecto son 10 elementos ¿que


tan costoso es
realizar un recorrido para convertirlo a areglo?.

No lo pregunto por que no crea que tu problema sea real,


pero me gustaría
saber más del contexto. ¿Ese procesamiento sobre 10


cadenas lo vas a
ejecutar muchas veces seguidas?, ¿sobre diferentes


conjuntos de cadenas?.

Mi recomendación sería hacer el método que acepte un


arreglo, y hacer un
arreglo a partir de los registros del DataReader. Es lo


mas sencillo y no sé
si efectivamente ya haz hecho mediciones de que va a


tardar mucho mas si
haces la conversíón al arreglo, yo no lo creo, pero te


repito, depende de el
contexto.

un saludo

Sergio
"Carla" wrote in message
news:
Hola a todos,
necesito extraer 10 cadenas que estan en una columna




(esto es importante,no
estan en una fila, sino ya se que podria usar GetValues




()), para copiarlas
a
un array.el rendimiento es fundamental por lo que he




pensado en
implementar
un DataReader.La cosa es que para copiarlo a un array




necesito recorrerlo
1
por 1 y copiarlo a mano, y resulta que despues el




array tengo que
recorrerlo
en mi aplicacion.He pensado en pasarle directamente al




metodo el
dataReader
y que lo recorra el mismo, pero tambien necesito que




se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante




largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que




tenga de parametro
un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo






.

Respuesta Responder a este mensaje
#3 Sergio Acosta
23/12/2003 - 20:45 | Informe spam
Se que muchas veces el buen desempeño de las aplicaciones está peleado con
las buenas prácticas de diseño, pero considera que el DataReader no está
hecho para ser un transporte de datos entre capas.

No te vaya a traer mas problemas de los que te soluciona el andar pasando el
DataReader a la capa de los componentes de negocio o presentación.

Pero bueno, repito. Si es importante el alto desemeño, hay que sacrificar un
poco la elegancia de la solución.

Procede con cautela :)

wrote in message
news:05c801c3c92d$51f7a000$
hola Sergio,antes de nada gracias por contestar
La verdad que lo he pensado y creo que si voy a hacerlo
asi,copiarlo primero manualmente.aunque hiciera lo de
IEnumerator,despues tendria que volver a hacer una
conversion hacia arriba hacia DataRecord para volver a
extraerlo, asi que seguramente tardaria mas tienes razon.

Lo unico es que en mi clase cliente tendre que recibir el
DataReader (no podre hacer que mi componente de acceso a
datos procese el Reader y me devuelva un array ya que el
reader va a almacenar mas columnas) con lo cual ah atare
minimanente mi aplicacion a que acepte un
Reader,OledbDataReader en este caso.si cambio el gestor
de BBDD tambien tendre que modificar la aplicacion
cliente.Pero esto son tonterias, y es cierto, si quieres
rapidez no lo puedes tener todo.

Te agradezco la ayuda,Un saludo
Hola Carla,

En principio, me parece que lo mas adecuado para sacar


de la base de datos
el conjunto de cadenas si es un SqlDataReader por que es


la forma mas
eficiente de hacerlo.

Pero, ¿En verdad es tan necesario ahorrarte la


conversión del DataReader al
arreglo? Es decir, si en efecto son 10 elementos ¿que


tan costoso es
realizar un recorrido para convertirlo a areglo?.

No lo pregunto por que no crea que tu problema sea real,


pero me gustaría
saber más del contexto. ¿Ese procesamiento sobre 10


cadenas lo vas a
ejecutar muchas veces seguidas?, ¿sobre diferentes


conjuntos de cadenas?.

Mi recomendación sería hacer el método que acepte un


arreglo, y hacer un
arreglo a partir de los registros del DataReader. Es lo


mas sencillo y no sé
si efectivamente ya haz hecho mediciones de que va a


tardar mucho mas si
haces la conversíón al arreglo, yo no lo creo, pero te


repito, depende de el
contexto.

un saludo

Sergio
"Carla" wrote in message
news:
Hola a todos,
necesito extraer 10 cadenas que estan en una columna




(esto es importante,no
estan en una fila, sino ya se que podria usar GetValues




()), para copiarlas
a
un array.el rendimiento es fundamental por lo que he




pensado en
implementar
un DataReader.La cosa es que para copiarlo a un array




necesito recorrerlo
1
por 1 y copiarlo a mano, y resulta que despues el




array tengo que
recorrerlo
en mi aplicacion.He pensado en pasarle directamente al




metodo el
dataReader
y que lo recorra el mismo, pero tambien necesito que




se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante




largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que




tenga de parametro
un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo






.

Respuesta Responder a este mensaje
#4 Carla
24/12/2003 - 09:17 | Informe spam
Hola sergio
pero entonces para recuperar 10 simples cadenas de una
BBDD voy a tener que traerme un DataSet? No tengo otra
opcion?
es que, tienes razon, la arquitectura del reader no esta
pensada para lo que quiero, pero tambien tener que
crearme el ds, dataadapter etc,cuando no voy a necesitar
actualizacion...
me parece un poco exagerado no crees?

Feliz navidad y un saludo


Se que muchas veces el buen desempeño de las


aplicaciones está peleado con
las buenas prácticas de diseño, pero considera que el


DataReader no está
hecho para ser un transporte de datos entre capas.

No te vaya a traer mas problemas de los que te soluciona


el andar pasando el
DataReader a la capa de los componentes de negocio o


presentación.

Pero bueno, repito. Si es importante el alto desemeño,


hay que sacrificar un
poco la elegancia de la solución.

Procede con cautela :)

wrote in message
news:05c801c3c92d$51f7a000$
hola Sergio,antes de nada gracias por contestar
La verdad que lo he pensado y creo que si voy a hacerlo
asi,copiarlo primero manualmente.aunque hiciera lo de
IEnumerator,despues tendria que volver a hacer una
conversion hacia arriba hacia DataRecord para volver a
extraerlo, asi que seguramente tardaria mas tienes razon.

Lo unico es que en mi clase cliente tendre que recibir el
DataReader (no podre hacer que mi componente de acceso a
datos procese el Reader y me devuelva un array ya que el
reader va a almacenar mas columnas) con lo cual ah atare
minimanente mi aplicacion a que acepte un
Reader,OledbDataReader en este caso.si cambio el gestor
de BBDD tambien tendre que modificar la aplicacion
cliente.Pero esto son tonterias, y es cierto, si quieres
rapidez no lo puedes tener todo.

Te agradezco la ayuda,Un saludo
Hola Carla,

En principio, me parece que lo mas adecuado para sacar


de la base de datos
el conjunto de cadenas si es un SqlDataReader por que es


la forma mas
eficiente de hacerlo.

Pero, ¿En verdad es tan necesario ahorrarte la


conversión del DataReader al
arreglo? Es decir, si en efecto son 10 elementos ¿que


tan costoso es
realizar un recorrido para convertirlo a areglo?.

No lo pregunto por que no crea que tu problema sea real,


pero me gustaría
saber más del contexto. ¿Ese procesamiento sobre 10


cadenas lo vas a
ejecutar muchas veces seguidas?, ¿sobre diferentes


conjuntos de cadenas?.

Mi recomendación sería hacer el método que acepte un


arreglo, y hacer un
arreglo a partir de los registros del DataReader. Es lo


mas sencillo y no sé
si efectivamente ya haz hecho mediciones de que va a


tardar mucho mas si
haces la conversíón al arreglo, yo no lo creo, pero te


repito, depende de el
contexto.

un saludo

Sergio
"Carla" wrote in message
news:
Hola a todos,
necesito extraer 10 cadenas que estan en una columna




(esto es importante,no
estan en una fila, sino ya se que podria usar






GetValues
()), para copiarlas
a
un array.el rendimiento es fundamental por lo que he




pensado en
implementar
un DataReader.La cosa es que para copiarlo a un array




necesito recorrerlo
1
por 1 y copiarlo a mano, y resulta que despues el




array tengo que
recorrerlo
en mi aplicacion.He pensado en pasarle directamente al




metodo el
dataReader
y que lo recorra el mismo, pero tambien necesito que




se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante




largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que




tenga de parametro
un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo






.





.

Respuesta Responder a este mensaje
#5 Sergio Acosta
24/12/2003 - 19:34 | Informe spam
Hola.

A mi tampoco me gusta la idea del DataSet.

Por que no piensas en alguna estructura de dato 'hecha a mano'. Puede ser
tan sencilla como un arreglo de cadenas. Si, tendrías que recorrer el
DataReader una vez, pero de esa forma podrías liberar la conexión a la base
de datos inmediatamente. Yo estoy seguro que la escalabilidad que puede
lograr tu aplicación al liberar pronto las conexiones de la base de datos va
a ser mayor que la que podrías lograr por ahorrarte el recorrido del
DataReader.

Sin embargo, en tu post anterior dices que: "no podre hacer que mi
componente de acceso a
datos procese el Reader y me devuelva un array ya que el reader va a
almacenar mas columnas". Esto me hace suponer que no es en realidad
solamente una cadena por registro, sino que hay mas campos, eso es cierto?

Mi sugerncia es que hagas una clase que tenga una variable miembro por cada
campo del DataReader y que contenga los datos de un registro de tu
DataReader, y que generes un arreglo que contenga 10 de esas clases. El
tiempo de crear ese arreglo no tiene por que ser una penalización
importante, pero logras: cerrar pronto la cadena de la base de datos, pasar
un arreglo con todos los datos que traía originalmente el DataReader.

Se que todo esto muy probablemente ya lo habías pensado y simplemente
estabas buscando una mejor opción. Pero yo creo que este enfoqe que te
platico es apropiado para el caso y no te va a causar mayor problema de
performance.

Si quieres que te ayude con algo de código no dudes en decirme.


Un saludo y felices fiestas

Sergio


"Carla" wrote in message
news:017901c3c9f6$518a9400$
Hola sergio
pero entonces para recuperar 10 simples cadenas de una
BBDD voy a tener que traerme un DataSet? No tengo otra
opcion?
es que, tienes razon, la arquitectura del reader no esta
pensada para lo que quiero, pero tambien tener que
crearme el ds, dataadapter etc,cuando no voy a necesitar
actualizacion...
me parece un poco exagerado no crees?

Feliz navidad y un saludo


Se que muchas veces el buen desempeño de las


aplicaciones está peleado con
las buenas prácticas de diseño, pero considera que el


DataReader no está
hecho para ser un transporte de datos entre capas.

No te vaya a traer mas problemas de los que te soluciona


el andar pasando el
DataReader a la capa de los componentes de negocio o


presentación.

Pero bueno, repito. Si es importante el alto desemeño,


hay que sacrificar un
poco la elegancia de la solución.

Procede con cautela :)

wrote in message
news:05c801c3c92d$51f7a000$
hola Sergio,antes de nada gracias por contestar
La verdad que lo he pensado y creo que si voy a hacerlo
asi,copiarlo primero manualmente.aunque hiciera lo de
IEnumerator,despues tendria que volver a hacer una
conversion hacia arriba hacia DataRecord para volver a
extraerlo, asi que seguramente tardaria mas tienes razon.

Lo unico es que en mi clase cliente tendre que recibir el
DataReader (no podre hacer que mi componente de acceso a
datos procese el Reader y me devuelva un array ya que el
reader va a almacenar mas columnas) con lo cual ah atare
minimanente mi aplicacion a que acepte un
Reader,OledbDataReader en este caso.si cambio el gestor
de BBDD tambien tendre que modificar la aplicacion
cliente.Pero esto son tonterias, y es cierto, si quieres
rapidez no lo puedes tener todo.

Te agradezco la ayuda,Un saludo
Hola Carla,

En principio, me parece que lo mas adecuado para sacar


de la base de datos
el conjunto de cadenas si es un SqlDataReader por que es


la forma mas
eficiente de hacerlo.

Pero, ¿En verdad es tan necesario ahorrarte la


conversión del DataReader al
arreglo? Es decir, si en efecto son 10 elementos ¿que


tan costoso es
realizar un recorrido para convertirlo a areglo?.

No lo pregunto por que no crea que tu problema sea real,


pero me gustaría
saber más del contexto. ¿Ese procesamiento sobre 10


cadenas lo vas a
ejecutar muchas veces seguidas?, ¿sobre diferentes


conjuntos de cadenas?.

Mi recomendación sería hacer el método que acepte un


arreglo, y hacer un
arreglo a partir de los registros del DataReader. Es lo


mas sencillo y no sé
si efectivamente ya haz hecho mediciones de que va a


tardar mucho mas si
haces la conversíón al arreglo, yo no lo creo, pero te


repito, depende de el
contexto.

un saludo

Sergio
"Carla" wrote in message
news:
Hola a todos,
necesito extraer 10 cadenas que estan en una columna




(esto es importante,no
estan en una fila, sino ya se que podria usar






GetValues
()), para copiarlas
a
un array.el rendimiento es fundamental por lo que he




pensado en
implementar
un DataReader.La cosa es que para copiarlo a un array




necesito recorrerlo
1
por 1 y copiarlo a mano, y resulta que despues el




array tengo que
recorrerlo
en mi aplicacion.He pensado en pasarle directamente al




metodo el
dataReader
y que lo recorra el mismo, pero tambien necesito que




se le pueda pasar un
array.El tratamiento que tengo que hacer es bastante




largo, asi que las
sobrecargas creo que serian dificiles
La unica interfaz que soportan los dos es IEnumerable
Me recomendais que lo haga asi, haciendo un metodo que




tenga de parametro
un
interfaz IEnumerable, o veis otra solucion?

gracias y un saludo






.





.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida