Usuario
Linq to Entities: Lentitud en query

Pregunta
-
Hola,
Tengo la siguiente consulta:
var nuevo = TextBox1.Lines; var TempID= (from p in db.DT1 where nuevo.Contains(p.ColumnID) select p.Catalog).Distinct(); var query = from p in db.DT2 where TempID.Contains(p.OtherCatalog) select new { p.Column1, p.Column2, p.Column3, p.Column4 }; MessageBox.Show("ya"); comboBox3.DataSource = query;
Ambas consultas se realizan basatante rápido, lo compruebo con el MessageBox, pero luego tarda alrededor de 20 segundos para colocar los datos ya sea en un ComboBox o en un Datagridview.
¿Qué podría hacer para corregir esto?
omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net
Todas las respuestas
-
el tema es que el render en pantalla siempre es lento, lo cual no me extraña lo que comentas
lo que no has mencionado es que volumen de datos estas mostrando, porque si cargas 100 o mas registros es logico que tarde
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Al principio pense que era la cantidad de datos, pero luego me di cuenta que hacer las consultas en fracciones de segundos.
Trae de 3 a 5 filas con 6 columnas en total. Lo que me extraña es que el siguiente query es muy rapido y trae y organiza la misma informacion:
var nuevo = TextBox1.Lines; var query = from p in db.DT2 where nuevo .Contains(p.OtherCatalog) select new { p.Column1, p.Column2, p.Column3, p.Column4 }; MessageBox.Show("ya"); comboBox3.DataSource = query;
omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net
-
de casualidad al combo el asignaste el evento SelectedIndexchanged ? si es asi quita ese evento y usa el SelectionChangeCommit
porque cuando asignas el datasource el SelectedIndexchanged se dispara por cada item que se crea
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Cuando muestras el mensaje, todavía no ha habido ningún acceso a la base de datos. Se produce al asignar al DataSource (y puede que más tarde, de forma asíncrona). Añade un ToList para forzar la ejecución. Nunca asignes al UI una consulta deferida. Además, así sabrás lo que tarda realmente, aunque para eso te recomiendo un StopWatch y Debug.WriteLine.
Pablo Núñez, @pablonete
-
No funciona, he probado independientemente con el combobox y el gridview y el tiempo de llenado de cada uno sigue siendo aproximadamente unos 20 segundos.
omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net
-
Probe sus sugerencias, con el StopWatch me percate que el tiempo de ecucion es de 32 segundos. Necesito encontrar una manera de resolver esto.
omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net