这是一个使用Xamarin的Android应用程序。
我有一个简单的搜索屏幕,用户根据州,城市,州际等选择过滤(1个或多个选项)。当状态发生变化时,其他下拉列表会相应更改(根据该州存在的城市或州际公路等)。每次更改状态下拉列表以更新其他下拉列表时,它需要2秒或更长时间,同时UI不响应。我还注意到,在set方法中的所有代码完成之前,实际上不会发生RaisePropertyChanged事件。如何加快速度以提供更好的用户体验?
这是一个很慢的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();
答案 0 :(得分:2)
通过所有优化,“先测量,优化第二”。
当你说某些事情非常缓慢时,找出它是什么。这是UI重绘吗?这是一个特定的SQLite调用吗?这是一个特定的线程交互。
一旦你确定了什么是慢的,那么你可以使用一些技术:
但所有这些想法都应该在测量之后(在我看来和经验中),否则你很容易就会最终优化错误的东西。
答案 1 :(得分:1)
解决方案是将查询更改为以下内容:
var parentIds = _connection.Table<Parent>().Where(x => x.State == state).Select(x => x.Id).ToList();
var children = _connection.Table<Child>().ToList();
return
children.Where(x => parentIds.Contains(x.ParentId))
.Select(x => x.ChildProperty)
.OrderBy(x => x)
.Distinct();