none
Linq to Entities: Lentitud en query RRS feed

  • 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

    viernes, 4 de enero de 2013 13:36

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

    viernes, 4 de enero de 2013 16:15
  • 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

    viernes, 4 de enero de 2013 18:12
  • 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

    sábado, 5 de enero de 2013 5:36
  • 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

    domingo, 6 de enero de 2013 18:00
  • 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

    lunes, 7 de enero de 2013 12:31
  • 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

    lunes, 7 de enero de 2013 13:15