Linq查询很慢

时间:2013-12-19 06:37:52

标签: wpf linq sqlite

 var data= (from a in context.Table1
              where a.Id== id
              select a);
  return data.ToList();

我在wpf项目中有上面的linq查询。上面的查询从SQLite数据库中获取大约0.2-0.3百万行。结果提取速度很快但是在执行data.ToList()时,由于no而需要很多时间。行,因此我的UI等待15-20秒才能看到结果。我该如何解决这个问题。

此外,如果上面的表包含外键,那么在访问子元素时,它会抛出ObjectDisposeedException。我猜它是由于延迟加载,所以我试图明确设置子元素。它工作但后来我的过程变得更慢

2 个答案:

答案 0 :(得分:2)

当然LINQ命令“立刻执行”,下面只是代表查询。

 var data= (from a in context.Table1
              where a.Id== id
              select a);

只有在return data.ToList();迭代查询时才执行查询,这正是ToList方法所做的。

我建议您使用寻呼机中的SkipTake运算符来缩小从数据库中查询的结果范围。这样做,您只需要10或20个元素或任何您需要的元素,从而获得更顺畅的体验。

分页也一定会优化您的检索性能..

答案 1 :(得分:0)

在使用" .ToList()"之前表示您仍处于模式" IQueryable"中的代码,以及使用" .ToList()"表示您访问物理数据库。 您可以采用某种方式获取一些数据"。采取(x)"和" .Page(y)"在LINQ上。你可以试试这个方法:

subSet().size()