这是一个使用 Xamarin 的 Android 应用程序。
我有一个简单的搜索屏幕,用户可以选择根据州、城市、州际公路等(1 个或多个选项)进行过滤。当州改变时,其他下拉列表会相应地改变(基于该州存在的城市或州际公路等)。每次我更改状态下拉列表以更新其他下拉列表时都需要 2 秒或更长时间,同时 UI 没有响应。我还注意到 RaisePropertyChanged 事件实际上不会发生,直到 set 方法中的所有代码完成为止。如何加快速度以提供更好的用户体验?
这里是缓慢的 SQL 调用。我正在寻找基于父对象属性的子对象列表。
var parentIds = _connection.Table<Parent>().Where(x => x.State == state).Select(x => x.Id);
return _connection.Table<Child>()
.Where(x => parentIds.Contains(x.ParentId))
.Select(x => x.ChildProperty)
.OrderBy(x => x)
.Distinct();
最佳答案
对于所有优化,“首先测量,其次优化”。
当您说某件事非常慢时,请确定是什么。是UI重绘吗?这是一个特定的 SQLite 调用吗?它是一种特定的线程交互吗?
一旦确定了慢的原因,就可以使用以下技术:
- 将各种缓慢的事情放在后台非 UI 线程上
- 虚拟化内存加载(这样您就不必加载整个大列表)
- 将数据缓存在内存中,这样您就不必每次都访问数据库
- 向大型数据库(或内存存储)添加更多索引
但是所有这些想法都应该在测量之后提出(根据我的观点和经验),否则你很容易最终优化错误的东西。
关于android - MvvmCross 与 SQLite 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702846/