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

Lao*_*Lao 3 c# firefox internet-explorer entity-framework google-chrome

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

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

旧代码:

  1. 使用SqlCommand调用存储过程并使用SqlAdapter填充新的DataTable.
  2. DataTable将被发送到每个DropDownList的方法中.(有5个DDL)
  3. 每个方法都会将DataTable的行(是的,每个行)提供给IEnumerable.
  4. 将针对IEnumerable运行多个LINQ查询以过滤掉我们想要的选项,包括.Distinct(IEqualityComparer)和.Sort(x => x ["RowName"]); (同样,每种方法都会执行此操作).
  5. 将通过IEnumerable.CopyToDataTable()创建一个新的DataTable(是的,同样,每个方法)
  6. 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"));
Run Code Online (Sandbox Code Playgroud)

现在,如果您将观看以下视频,您会发现上面的代码在Firefox和Chrome中都能很好地运行,但它在MS IE中却很流行.通常我会很高兴,因为我不使用IE浏览器,但IE是公司政策.值得一提的是,滞后仅发生在FIRST DDL上,而不是后续选择中的任何一个.此外,初始加载(加载所有数据,不受任何限制,使用相同的方法)也不会花费很长时间来加载.

http://www.youtube.com/watch?v=-3QyNj87BSQ

请稍等一下,请告诉我为什么IE会像这样,以及我可以做些什么来解决它.顺便说一句,它在IE7和IE8中的表现同样糟糕

Che*_*try 5

首先,在此上下文中,您在问题中包含的代码没有任何错误,因为它不在IE中运行.它与ASP.NET UpdatePanel回发代码有关,有时在IE中存在问题,特别是有很多行的下拉列表.看到这个.

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