Muchos Registros, va lento

23/06/2009 - 13:54 por Julian | Informe spam
Hola a todos, vengo de Visual Fox Pro, donde yo recorria toda la tabla,
siguient, anterior y los registros los tenia ya.
En C# tengo que recuperar 66.000 registro de una tabla y en un Pentium III
600MG ram me tarda 40 segundos.
Necesito un mantenimiento tipico Siguiente, Anterior.
Lo que hago es recuperar todos los registros a un BindingList, asiginar este
a un BindingSource.
Una vez recuperados los registro, va bien.
¿Hago algo mal? ¿Existe otro método para un mantenimiento mejor?.

Gracias de antemano.

Preguntas similare

Leer las respuestas

#1 Fernando A. Gómez F.
23/06/2009 - 18:54 | Informe spam
Julian wrote:
Hola a todos, vengo de Visual Fox Pro, donde yo recorria toda la tabla,
siguient, anterior y los registros los tenia ya.
En C# tengo que recuperar 66.000 registro de una tabla y en un Pentium III
600MG ram me tarda 40 segundos.
Necesito un mantenimiento tipico Siguiente, Anterior.
Lo que hago es recuperar todos los registros a un BindingList, asiginar este
a un BindingSource.
Una vez recuperados los registro, va bien.
¿Hago algo mal? ¿Existe otro método para un mantenimiento mejor?.

Gracias de antemano.






Para hacer paginaciones te podrías basar en SqlDataAdapter.Fill(int,
int, DataTable[]):

http://msdn.microsoft.com/es-es/lib...wy74x.aspx

Mantén en alguna variable la posición actual y el número de registros
máximos por página, y se lo pasas al adapter. Cada que tu (l)user
apriete "siguiente" aumentas dicha variable en el número de paginación,
y cuando presione "anterior" lo disminuyes.

Methinks que sería la opción.

Saludos.

Fernando Gómez
www.fermasmas.com
Respuesta Responder a este mensaje
#2 Julian
25/06/2009 - 09:58 | Informe spam
Gracias por tu respuesta, creo que es buena, pero como estoy utilizando la
tecnologia LINQ, tendré que buscarme
una solución por este camino. He estado probando a ejecutar un hilo aparte
que me traiga todos los registro, mientras
el usuario introduce los datos del cliente, en el caso de un albarán, con
buenos resultados.
Thread hiloArticulos;

hiloArticulos = new Thread(RecuperarArticulos);

hiloArticulos.Priority = ThreadPriority.Highest;

hiloArticulos.Start();

CapaPresentacionWindows.FormStandard.MeteCodigo buscaCliente = new
CapaPresentacionWindows.FormStandard.MeteCodigo(dc, true);

DialogResult res = buscaCliente.ShowDialog();

clienteActual = buscaCliente.ClienteEncontrado; // Asignamos el cliente
encontrado por el Formulario buscaCliente

ClientesBindingSource.DataSource = clienteActual; // Asignamos la colecion
de Clientes al BindingSource de Clientes

""Fernando A. Gómez F."" escribió en el
mensaje news:%
Julian wrote:
Hola a todos, vengo de Visual Fox Pro, donde yo recorria toda la tabla,
siguient, anterior y los registros los tenia ya.
En C# tengo que recuperar 66.000 registro de una tabla y en un Pentium
III 600MG ram me tarda 40 segundos.
Necesito un mantenimiento tipico Siguiente, Anterior.
Lo que hago es recuperar todos los registros a un BindingList, asiginar
este a un BindingSource.
Una vez recuperados los registro, va bien.
¿Hago algo mal? ¿Existe otro método para un mantenimiento mejor?.

Gracias de antemano.




Para hacer paginaciones te podrías basar en SqlDataAdapter.Fill(int, int,
DataTable[]):

http://msdn.microsoft.com/es-es/lib...wy74x.aspx

Mantén en alguna variable la posición actual y el número de registros
máximos por página, y se lo pasas al adapter. Cada que tu (l)user apriete
"siguiente" aumentas dicha variable en el número de paginación, y cuando
presione "anterior" lo disminuyes.

Methinks que sería la opción.

Saludos.

Fernando Gómez
www.fermasmas.com
Respuesta Responder a este mensaje
#3 Juan
25/06/2009 - 13:20 | Informe spam
Lo primero que tendrías que preguntarte es si necesitas recuperar 66000
registros y más si vas a tener siguiente y anterior. En principio me parece
del todo innecesario y sería mejor realizar algún filtro previo.

Saludos

"Julian" escribió en el mensaje de
noticias:
Gracias por tu respuesta, creo que es buena, pero como estoy utilizando la
tecnologia LINQ, tendré que buscarme
una solución por este camino. He estado probando a ejecutar un hilo aparte
que me traiga todos los registro, mientras
el usuario introduce los datos del cliente, en el caso de un albarán, con
buenos resultados.
Thread hiloArticulos;

hiloArticulos = new Thread(RecuperarArticulos);

hiloArticulos.Priority = ThreadPriority.Highest;

hiloArticulos.Start();

CapaPresentacionWindows.FormStandard.MeteCodigo buscaCliente = new
CapaPresentacionWindows.FormStandard.MeteCodigo(dc, true);

DialogResult res = buscaCliente.ShowDialog();

clienteActual = buscaCliente.ClienteEncontrado; // Asignamos el cliente
encontrado por el Formulario buscaCliente

ClientesBindingSource.DataSource = clienteActual; // Asignamos la colecion
de Clientes al BindingSource de Clientes

""Fernando A. Gómez F."" escribió en el
mensaje news:%
Julian wrote:
Hola a todos, vengo de Visual Fox Pro, donde yo recorria toda la tabla,
siguient, anterior y los registros los tenia ya.
En C# tengo que recuperar 66.000 registro de una tabla y en un Pentium
III 600MG ram me tarda 40 segundos.
Necesito un mantenimiento tipico Siguiente, Anterior.
Lo que hago es recuperar todos los registros a un BindingList, asiginar
este a un BindingSource.
Una vez recuperados los registro, va bien.
¿Hago algo mal? ¿Existe otro método para un mantenimiento mejor?.

Gracias de antemano.




Para hacer paginaciones te podrías basar en SqlDataAdapter.Fill(int, int,
DataTable[]):

http://msdn.microsoft.com/es-es/lib...wy74x.aspx

Mantén en alguna variable la posición actual y el número de registros
máximos por página, y se lo pasas al adapter. Cada que tu (l)user apriete
"siguiente" aumentas dicha variable en el número de paginación, y cuando
presione "anterior" lo disminuyes.

Methinks que sería la opción.

Saludos.

Fernando Gómez
www.fermasmas.com




Respuesta Responder a este mensaje
#4 Julian
25/06/2009 - 14:01 | Informe spam
OK. Juan, es lo mas inteligente, aunque la multitarea soluciona el problema
bastante bien
un Pentium III no da para mucho.
Intentaré la paginación en LINQ.
Primero, traer el registro que el usuario busca.
Segundo, realizar un filtro, alrededor de ese registro.
Tercero, traermelos registros encontrados.

Y en cada búsqueda repetir procesos.

"Juan" escribió en el mensaje
news:
Lo primero que tendrías que preguntarte es si necesitas recuperar 66000
registros y más si vas a tener siguiente y anterior. En principio me
parece del todo innecesario y sería mejor realizar algún filtro previo.

Saludos

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida