C# Internet Explorer滞后于IQueryable数据源。Firefox和Chrome A-OK。视频证明提供

C# Internet Explorer滞后于IQueryable数据源。Firefox和Chrome A-OK。视频证明提供,c#,internet-explorer,entity-framework,firefox,google-chrome,C#,Internet Explorer,Entity Framework,Firefox,Google Chrome,我想说这是一个疑问,但事实并非如此。即使我们一步一步地进行,查询也会顺利完成。即使是.DataBind()方法似乎也不会导致延迟 以下是我如何知道它与作为绑定源的IQueryable有关: 旧代码: 使用SqlCommand调用存储过程,并使用SqlAdapter填充新的数据表 DataTable将被发送到每个DropDownList的方法中。(共有5个DDL) 每个方法都将数据表的行(是的,每个行)馈送到IEnumerable中 将对IEnumerable运行多个LINQ查询,以筛选出我们想要

我想说这是一个疑问,但事实并非如此。即使我们一步一步地进行,查询也会顺利完成。即使是.DataBind()方法似乎也不会导致延迟

以下是我如何知道它与作为绑定源的IQueryable有关:

旧代码:

  • 使用SqlCommand调用存储过程,并使用SqlAdapter填充新的数据表
  • DataTable将被发送到每个DropDownList的方法中。(共有5个DDL)
  • 每个方法都将数据表的行(是的,每个行)馈送到IEnumerable中
  • 将对IEnumerable运行多个LINQ查询,以筛选出我们想要的选项,包括.Distinct(IEqualityComparer)和.Sort(x=>x[“RowName]”);(同样,每个方法都会执行此操作)
  • 将通过IEnumerable.CopyToDataTable()创建一个新的DataTable(是的,同样是每个方法)
  • DropDownList.DataSource将被设置为新的DataTable,然后将被设置为.DataBind()
  • 这种对代码的可怕的嘲弄会在IE中很快结束。也许需要一两秒钟的思考时间

    这是新的代码,在肉体上:

    IQueryable<Expose_LotRuns> elr = DB.Expose_LotRuns;
    
    if (iTechID > 0)
        elr = elr.Where(x => x.Master_LotRuns.Flows.CD_Techs.ID == iTechID);
    
    if (iFlowID > 0)
        elr = elr.Where(x => x.Master_LotRuns.Flows.ID == iFlowID);
    
    if (iToolID > 0)
        elr = elr.Where(x => x.Master_LotRuns.Tools.ID == iToolID);
    
    if (iOperationID > 0)
        elr = elr.Where(x => x.Master_LotRuns.Operations.ID == iOperationID);
    
    if (iReticleID > 0)
        elr = elr.Where(x => x.Reticles.ID == iReticleID);
    
    var techs = from x in elr
                            where (x.Master_LotRuns.Flows.CD_Techs != null)
                            group x by new
                            {
                                x.Master_LotRuns.Flows.CD_Techs.ID,
                                x.Master_LotRuns.Flows.CD_Techs.Technology
                            } into y
                            orderby y.Key.Technology
                            select new { y.Key.ID, y.Key.Technology };
    
    var flows = from x in elr
                            //where (x.Master_LotRuns.Flows != null)
                            group x by new
                            {
                                x.Master_LotRuns.Flows.ID,
                                x.Master_LotRuns.Flows.Flow
                            } into y
                            orderby y.Key.Flow
                            select new { y.Key.ID, y.Key.Flow };
    
    var tools = from x in elr
                            //where (x.Master_LotRuns.Tools != null)
                            group x by new
                            {
                                x.Master_LotRuns.Tools.ID,
                                x.Master_LotRuns.Tools.Tool
                            } into y
                            orderby y.Key.Tool
                            select new { y.Key.ID, y.Key.Tool };
    
    var ops = from x in elr
                        //where (x.Master_LotRuns.Operations != null)
                        group x by new
                        {
                            x.Master_LotRuns.Operations.ID,
                            x.Master_LotRuns.Operations.Operation
                        } into y
                        orderby y.Key.Operation
                        select new { y.Key.ID, y.Key.Operation };
    
    var rets = from x in elr
                         //where (x.Reticles != null)
                         group x by new { x.Reticles.ID, x.Reticles.Reticle } into y
                         orderby y.Key.Reticle
                         select new { y.Key.ID, y.Key.Reticle };
    
    ddlTechs.DataTextField = "Technology";
    ddlTechs.DataValueField = "ID";
    ddlTechs.DataSource = techs;
    ddlTechs.DataBind();
    ddlTechs.Items.Insert(0, new ListItem("Any", "0"));
    
    ddlFlows.DataTextField = "Flow";
    ddlFlows.DataValueField = "ID";
    ddlFlows.DataSource = flows;
    ddlFlows.DataBind();
    ddlFlows.Items.Insert(0, new ListItem("Any", "0"));
    
    ddlTools.DataTextField = "Tool";
    ddlTools.DataValueField = "ID";
    ddlTools.DataSource = tools;
    ddlTools.DataBind();
    ddlTools.Items.Insert(0, new ListItem("Any", "0"));
    
    ddlOpers.DataTextField = "Operation";
    ddlOpers.DataValueField = "ID";
    ddlOpers.DataSource = ops;
    ddlOpers.DataBind();
    ddlOpers.Items.Insert(0, new ListItem("Any", "0"));
    
    ddlReticles.DataTextField = "Reticle";
    ddlReticles.DataValueField = "ID";
    ddlReticles.DataSource = rets;
    ddlReticles.DataBind();
    ddlReticles.Items.Insert(0, new ListItem("Any", "0"));
    
    IQueryable elr=DB.Expose\u LotRuns;
    如果(iTechID>0)
    elr=elr.Where(x=>x.Master\u LotRuns.Flows.CD\u Techs.ID==iTechID);
    如果(iFlowID>0)
    elr=elr.Where(x=>x.Master\u LotRuns.Flows.ID==iFlowID);
    如果(iToolID>0)
    elr=elr.Where(x=>x.Master\u LotRuns.Tools.ID==iToolID);
    如果(iOperationID>0)
    elr=elr.Where(x=>x.Master\u LotRuns.Operations.ID==iOperationID);
    如果(iReticleID>0)
    elr=elr.Where(x=>x.retiles.ID==iReticleID);
    var techs=从elr中的x开始
    其中(x.Master_LotRuns.Flows.CD_Techs!=null)
    x组由新
    {
    x、 Master_LotRuns.Flows.CD_Techs.ID,
    x、 Master_LotRuns.Flows.CD_Techs.Technology
    }进入y
    orderby y.Key.Technology
    选择新{y.Key.ID,y.Key.Technology};
    var流量=从elr中的x开始
    //其中(x.Master_LotRuns.Flows!=null)
    x组由新
    {
    x、 Master_LotRuns.Flows.ID,
    x、 Master_LotRuns.Flows.Flow
    }进入y
    orderby y.Key.Flow
    选择新建{y.Key.ID,y.Key.Flow};
    var工具=从elr中的x开始
    //其中(x.Master\u LotRuns.Tools!=null)
    x组由新
    {
    x、 Master_LotRuns.Tools.ID,
    x、 Master_LotRuns.Tools.Tool
    }进入y
    orderby y.Key.Tool
    选择新建{y.Key.ID,y.Key.Tool};
    var ops=从elr中的x开始
    //其中(x.Master\u LotRuns.Operations!=null)
    x组由新
    {
    x、 Master_LotRuns.Operations.ID,
    x、 Master_LotRuns.Operations.Operation
    }进入y
    orderby y.Key.Operation
    选择新建{y.Key.ID,y.Key.Operation};
    var rets=从elr中的x开始
    //其中(x.十字线!=null)
    由新的{x.retries.ID,x.retries.retriel}将x分组为y
    orderby y.Key.REDILE
    选择新{y.Key.ID,y.Key.retile};
    ddlTechs.DataTextField=“技术”;
    ddlTechs.DataValueField=“ID”;
    ddlTechs.DataSource=techs;
    ddlTechs.DataBind();
    插入(0,新列表项(“任何”、“0”);
    ddlFlows.DataTextField=“Flow”;
    ddlFlows.DataValueField=“ID”;
    ddlFlows.DataSource=流;
    ddlFlows.DataBind();
    插入(0,新列表项(“任何”、“0”));
    ddlTools.DataTextField=“工具”;
    ddlTools.DataValueField=“ID”;
    ddlotools.DataSource=工具;
    ddlTools.DataBind();
    插入(0,新列表项(“任何”、“0”));
    ddlOpers.DataTextField=“操作”;
    ddlOpers.DataValueField=“ID”;
    ddlOpers.DataSource=ops;
    ddlOpers.DataBind();
    插入(0,新列表项(“任何”、“0”);
    ddlRetriels.DataTextField=“十字线”;
    ddlriecles.DataValueField=“ID”;
    ddlRetiles.DataSource=rets;
    ddlRetries.DataBind();
    插入(0,新列表项(“任何”、“0”));
    
    现在,如果你观看下面的视频,你会看到上面的代码在Firefox和Chrome中都很好地工作,但在MS IE中却很失败。通常我会很高兴,因为我不使用IE,但IE是公司的政策。还值得一提的是,延迟只发生在第一个DDL中,而不会发生在任何后续选择中。此外,初始加载(使用相同的方法加载所有数据,完全不受限制)也不会花费这么长时间加载


    请告诉我为什么IE会这样,我能做些什么来修复它。顺便说一句,它在IE7和IE8中的效果同样糟糕。首先,您在本文中的问题中包含的代码没有任何错误,因为它没有在IE中运行。它与ASP.NET
    UpdatePanel
    postback代码有关,IE中有时会出现问题,特别是在具有多行的下拉列表中。看


    要调试这样的问题,您可以附加一个探查器(IE8有一个),并查看哪个函数需要很长时间才能执行。如果您还连接了网络监视器,如HTTPWatch或Fiddler,则可以了解服务器响应所需的时间。在这种情况下,我高度怀疑服务器时间是问题所在。

    另一个发布的用户是否正确,以及如何正确