Json monotouch应用程序的大数据下载、本地处理和存储

Json monotouch应用程序的大数据下载、本地处理和存储,json,sqlite,xamarin.ios,local-storage,xamarin,Json,Sqlite,Xamarin.ios,Local Storage,Xamarin,对于monotouch/xamarin环境,这是一个更一般的软件架构问题 我的问题是: 我目前正在构建的应用程序在应用程序启动时下载了大约30k个json对象(6mb)。然后数据被本地存储,所以所有屏幕都进行本地db(sqlite)调用 主要问题是执行下载所需的时间。目前,模拟器上的总时间约为36秒,分为以下任务: 下载约10秒 数据转换(json到本机obj)~16秒 db插入~10秒 这太长了,尤其是当我将它与appstore上的类似应用进行比较时。我觉得我没有在这里做什么,或者没有意识到另

对于monotouch/xamarin环境,这是一个更一般的软件架构问题

我的问题是:

我目前正在构建的应用程序在应用程序启动时下载了大约30k个json对象(6mb)。然后数据被本地存储,所以所有屏幕都进行本地db(sqlite)调用

主要问题是执行下载所需的时间。目前,模拟器上的总时间约为36秒,分为以下任务:

  • 下载约10秒
  • 数据转换(json到本机obj)~16秒
  • db插入~10秒
  • 这太长了,尤其是当我将它与appstore上的类似应用进行比较时。我觉得我没有在这里做什么,或者没有意识到另一种方式?以下是我实施的改进:

  • gzip响应-当前为6mb,gzip的响应降低到~1mb
  • 已安装ServiceStack.Text json serialiser,大约比json.net快2.5倍(但16秒太长)
  • 扁平化json响应,因此我可以在响应数组上执行db.InsertAll()(无需额外的循环等),以实现更多robost db导入(事务)
  • 每天一次电话限制
  • 现在,我想做的是在应用程序启动时显示本地数据,并在后台初始化下载/更新程序。唯一的问题是下载+新安装的应用程序所需的时间将无法显示任何本地数据

    我的问题是:

  • MVC4API->json convert->sqlite导入是这种类型应用程序的好方法吗?如果没有-有什么替代方案 我一直在考虑服务器以压缩响应的形式返回实际的sqlite文件,或者返回压缩的db命令。。。或者sqlite不适合这种类型的应用程序?是否有更好的本地存储替代方案。net序列化程序/xml等


    谢谢你的建议

    我的建议是异步完成您的工作-您很幸运,因为C#使这非常容易。例如

  • 开始后台下载
  • 处理(后台)下载的对象
  • 在处理对象时插入(背景)对象
  • 如果适用,为您添加的每个X对象更新UI(从主线程) 由于下载是(大部分情况下,请参见注释)网络绑定的,因此您的CPU将空闲数秒。考虑到下一步(处理)将受到CPU的限制,这是浪费时间。甚至更多,因为后面的步骤很可能是I/O绑定的(数据库)

    在向应用程序用户提供进度反馈(显示数据或进度条)的同时,同时运行所有三个任务似乎是个好主意

    注#1:gzip的响应将更快地下载。OTOH在本地解压需要一些额外的(CPU)时间。它应该更快,但这两个选项都值得衡量(例如,使用苹果的Instrument工具,它可以很好地与Xamarin.iOS配合使用)


    注意#2:zip文件作为响应也需要额外的时间(解压)。下载后,您不希望按顺序执行此操作(但您可以在下载时将其解压缩)。

    您好,我也有类似的情况。你能给我一个如何使用gzip响应的例子吗?