. net . list函数太慢了



我们在使用。tolist命令时遇到了很多麻烦,它在VB中使用。asp.net与MVC。. NET web项目。

我们的数据库中有~2000个条目,我们使用LINQ命令来选择和排序这2000个条目。通过. tolist方法将结果转换为分页器和网格构建器的列表。问题是,. tolist占用的时间太长了(我们说的是执行40-60秒),所以我们的网站看起来很慢。

我们在数据库上测试了等效的SQL命令,它的响应很快。这不是命令或慢速数据库服务器的问题。我们尝试了一个更快的IEnumrable巫婆,但我们需要它在最后的。tolist格式为我们的网格。名单是怎么回事?我们能做点什么吗?

代码如下:

 'list = (From c In _entities.XXXXXXXXSet.Include("XXXXXX").Include("XXXXXX") _
                Where Not (c.XXXXXX Is Nothing AndAlso c.XXXXXX = String.Empty) _
                And c.XXXXXX = codeClient _
                And c.XXXXXX > dateLimite _
                Order By c.XXXXXX Descending _
                Select c).ToList()

我们将代码分开,只留下。tolist函数,这才是真正的问题所在。LINQ命令马上执行

谢谢。汤姆

当然,LINQ命令立即"执行",因为它只是表示查询。查询只在迭代一次时执行,这正是ToList方法所做的。

我建议您在寻呼机中使用SkipTake操作符来缩小从数据库查询的结果。这样,您只需请求10或20个元素或任何您需要的元素,从而获得更流畅的体验。

我认为最好在查询中分页,而不是一次取出所有数据,使用SkipTake

list = (From c In _entities.XXXXXXXXSet.Include("XXXXXX").Include("XXXXXX") _
            Where Not (c.XXXXXX Is Nothing AndAlso c.XXXXXX = String.Empty) _
            And c.XXXXXX = codeClient _
            And c.XXXXXX > dateLimite _
            Order By c.XXXXXX Descending _
            Select c).Skip(pageSize * pageIndex).Take(pageSize).ToList();

如果可能的话,配上一些目标明确的缓存,应该会提供更快捷的用户体验。

当您说"数据库上的等效SQL命令并且它响应迅速"-是LINQ代码生成的实际SQL语句还是逻辑等效的手工编码SQL ?

因为linq生成的代码可能不是非常高效。

对于这样的东西,在分析器中运行代码通常是有用的。可能有很多东西减慢了速度……网络、内存、对象大小等

还可以创建自己的列表,并将IEnumerable的值复制到其中。如果可能的话,我建议将您的网格更改为接受IEnumerable。

要确认与查询执行相反的ToList性能,请添加一条语句并进行比较:

  //this call iterates a query, causing a database roundtrip.
List<Row> result = query.ToList();
  //this call generates a new List by iterating the old List.
result = result.ToList();

查看您的查询,我怀疑您将需要一个codeClient,以及对.Include调用中提到的每个表的索引。获取生成的sql并检查执行计划以确认。

相关内容

  • 没有找到相关文章

最新更新