微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET .ToList函数的速度太慢

如何解决.NET .ToList函数的速度太慢

| 我们在使用.ToList命令时遇到了很多麻烦,该命令已在MB ASP.NET Web项目的VB.NET中使用。 我们的数据库中有〜2000个条目,我们使用LINQ命令对2000个条目进行选择和排序。通过我们的寻呼机和网格生成器的.ToList方法,结果将转换为列表。问题是,.ToList花费的时间太长(我们正在谈论40-60秒才能执行),因此我们的网站看起来很慢。 我们在数据库上测试了等效的sql命令,它可以快速响应。使用命令或数据库服务器运行缓慢都不是问题。我们尝试了一个速度更快的IEnumrable女巫,但我们需要网格末尾的.ToList格式。 .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命令可以立即执行。 非常感谢。 汤姆     

解决方法

我认为最好在查询中分页而不是使用ѭ1in和page2ѭ一次性获取所有数据。
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();
这样,再结合一些针对性强的缓存(如果可能的话),应该可以提供更轻松的用户体验。     ,当然,LINQ命令\“ executes \”可以立即执行,因为它仅表示查询。该查询仅在您对其进行迭代后才执行,这正是
ToList
方法所做的。 我建议您在寻呼机中使用
Skip
Take
运算符来缩小从数据库查询的结果的范围。这样,您只需要10或20个元素或任何您需要的元素,就可以带来更加流畅的体验。     ,当您说“数据库上的等效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并检查执行计划以确认。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。