对于monotouch / xamarin环境,这是一个更通用的软件架构问题。
这是我的问题:
我正在构建的应用程序在应用程序启动时下载大约30k的json对象(6mb)。然后在本地存储数据,因此所有屏幕都会进行本地db(sqlite)调用。
主要问题是执行下载所需的时间。目前,在模拟器上共计约36秒,分为以下任务:
这太长了,特别是当我将它与appstore上的类似应用进行比较时。我觉得我没有在这里做某事,或者没有意识到另一种方式?以下是我实施的改进措施:
现在,我想要做的是在应用程序启动时显示本地数据并在后台初始化下载/更新程序。唯一的问题是下载时间+新安装的应用程序将无法显示任何本地数据...
我的问题是:
我一直在考虑服务器返回实际的sqlite文件,使用压缩响应或返回压缩的db命令......或者sqlite不适合这种类型的应用程序?是否有更好的本地存储替代方案? .net serializer / xml等?
感谢你的所有建议!
答案 0 :(得分:2)
我的建议是异步完成你的工作 - 你很幸运,因为C#非常容易。 E.g。
由于下载(主要是看注释)网络绑定,因此您的CPU将空闲几秒钟。考虑到您的下一步(处理)将受CPU限制,这是浪费时间。甚至更多,因为之后的步骤可能是I / O绑定(数据库)。
IOW 看起来像一个好主意,同时运行所有三个任务,同时向应用程序用户提供进度反馈(显示数据或进度条)。
注意#1: gzipped 响应下载速度会更快。 OTOH需要一些额外的(CPU)时间来在本地解压缩。它应该更快但值得测量两个选项(例如使用Apple的Instrument工具,它与Xamarin.iOS很好地配合使用)。
注意#2: zip 文件作为响应,还需要额外的时间(解压缩)。这不是你想要在下载后按顺序执行的操作(但是你可以在下载时解压缩它)。