none
LINQ的性能问题 RRS feed

  • 问题

  • var query = bllc.GetContractByOrganization(base.Organization);
    if (!strContractName.Equals(string.Empty))
    query = query.Where(et => et.ContractName.Contains(strContractName));
    //...............
    //AspNetPager1分页控件
    AspNetPager1.RecordCount = query.ToList().Count;
          int pageSize = AspNetPager1.PageSize;
          GridView1.DataSource = query.Skip(pageSize * (PageIndex - 1)).Take(AspNetPager1.PageSize).ToList();
          GridView1.DataBind();

    我这是显示数据列表的页面,几万条数据,访问本地数据库还好,可部署到服务器,同时十几个人一起测试操作的时候,超慢,现在我们准备改用sql语句+存储过程来处理效率的问题了.我试着用DataLoadOptions,对象优化也不行,关联有三四个不对的对象(etContract.Company.CompanyExtension.SystemUser.EnglishName),LoadWith()也不好加载.请教下大家有没有好的建议?谢谢
    2008年11月28日 11:25

答案

  • 从性能上讲 EntityFramework 和 Linq to SQL 是不太比的过普通方法的~不过存储过程在 Entity Framework 中运能使用~还有就是数据库设计的好坏也影响到性能~
    2008年12月2日 11:33
    版主

全部回复

  • 我没学linq问题 有一点肯定的是越简单的东西付出代价越大 linq目前不合适大型网站使用的

    2008年11月29日 5:55
  • 从性能上讲 EntityFramework 和 Linq to SQL 是不太比的过普通方法的~不过存储过程在 Entity Framework 中运能使用~还有就是数据库设计的好坏也影响到性能~
    2008年12月2日 11:33
    版主
  • 我现在的感觉linq to sql是微软忽悠人的东东,最终目的是EF,所以我直接跳过linq to sql研究EF.........

    2008年12月2日 11:58
  • 做完这个项目后不再去关注LINQ了
    2008年12月3日 10:53
  •  张永亮 写:
    做完这个项目后不再去关注LINQ了

     

     

    用skip方式及其不妥  每次翻页都会进行一次全范围的select * sql操作

    想提升效率之需要进行一次select 然后对其结果进行 linq to object/collection即可

     

     

    你自己写得分页效率低  你埋怨linq   就好像埋怨dataset要更新一条数据好麻烦一样。

     

     不再去关注。。。 

     

    不知道是不是linq的福气

     

    2008年12月4日 2:31
  •  

     张永亮 写:
    做完这个项目后不再去关注LINQ了

     

     

     

    用skip方式及其不妥  每次翻页都会进行一次全范围的select * sql操作

    想提升效率之需要进行一次select 然后对其结果进行 linq to object/collection即可

     

     

    你自己写得分页效率低  你埋怨linq   就好像埋怨dataset要更新一条数据好麻烦一样。

     

     不再去关注。。。 

     

    不知道是不是linq的福气

     


    会全部查询一次??真的假的啊?那这不是骗人了吗?谁还会用啊。。。。
    2010年2月20日 14:19
  • 时间已经过去太久了,想必对楼主已经没有帮助了。简单回答一下,或许能对后来人有所帮助。

    楼主的主要问题是Linq使用不当,在计算查询总条数的时候,query.ToList().Count会把所有记录都查询到本地,然后再求总数。你说过有几万条数据,那当然会很慢。我们可以使用query.Count()方法,直接让数据库只计算总数,而不读取任何其他数据。

    简单说来,无论Linq to Sql、还是Entity Framework,都是一种O/R Mapping的“高级”集成查询语言,使用起来可以使用面向对象语言的各种特性,而且不用关心怎样写SQL,但也正是因为这样,就需要我们深入了解这些语言的内部细节,否则他们很容易做出一些“很傻、很笨”的查询。其实这本不是语言的错,而是我们需要足够的知识去驾驭他们。

    2011年1月6日 8:30