android - MvvmCross 与 SQLite 非常慢

标签 android sqlite xamarin mvvmcross

这是一个使用 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/

相关文章:

android - 快速检测信标是否超出范围

Android 外部与内部数据库混淆

ios - 如何消除NavigationBar?

Xamarin thrift pcl 实现

java - Android - 显示所有已安装应用程序的应用程序选择器

android - 使用 Gdx.app.getPreferences 检索首选项

iphone - 生产应用程序中的 iOS 核心数据对象模型更改

java - 从光标覆盖或更新 Android 播放列表数据库

ios - 在没有 iOS 设备的情况下生成我的 Xamarin 应用程序的 IPA 文件

android - 您需要在将应用上传到 google play 时向您的 APK 添加图标