【发布时间】:2018-02-05 14:46:59
【问题描述】:
在我们的 Xamarin Forms 应用程序中,此代码:
return database.GetAllWithChildren<Review>(x => x.ProductId == prodId, true).OrderByDescending(x => x.ReviewId).FirstOrDefault();
存在性能问题,该产品的评论越多,需要的时间越长。
对于一个有 7 条评论的产品,大约需要 17 秒,这是不可接受的。
如何优化性能?
毕竟我不需要所有评论信息,只需要最新的。
这似乎检索了所有 7 条评论,然后对它们进行降序排序,然后获得列表中的第一个。
有没有办法只获取具有最大 ID 的那个?
【问题讨论】:
-
17 秒听起来有些过分,即使您加载了所有 7 条评论。您可能需要在 RDBMS 中添加一些缺失的索引。
-
我在使用 LINQ 和 SQLiteNetExtensions 时遇到了很多性能问题。似乎它总是在执行过滤器或排序之前将所有数据加载到内存中。所以我最终放弃了,将检索策略改为SQL查询字符串。
-
使用 Martin Zikmund 解决方案,查询在 5 秒内加载。不是很好,但有很大的改进。
-
我也会用 SQL 查询字符串进行测试并告诉你结果
标签: performance linq xamarin linq-to-sql xamarin.forms