gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:54:23 26 4
gpt4 key购买 nike

这是monotouch/xamarin环境的一个更通用的软件架构问题。

这是我的问题:

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

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

  • 下载 ~ 10 秒
  • 数据转换(json 到原生 obj)~ 16 秒
  • 数据库插入 ~ 10 秒

  • 这太长了,尤其是当我将它与应用商店中的类似应用进行比较时。我觉得我没有在这里做某事,或者没有意识到另一种方式?以下是我实现的改进:
  • gzip 响应 - 当前为 6mb,使用 gzip 时它下降到 ~ 1mb
  • 安装 ServiceStack.Text json 序列化器,比 json.net 快约 2.5 倍(但仍然 16 秒太长)
  • 扁平化的 json 响应,因此我可以在响应数组上执行 db.InsertAll()(无需额外的循环等)以获得更多的 robost db 导入(事务)
  • 每天一次通话限制

  • 现在,我想做的是在应用启动时显示本地数据并在后台初始化下载/更新程序。唯一的问题是下载所需的时间+新安装的应用程序将没有任何本地数据可显示...

    我的问题是:
  • mvc 4 api -> json convert -> sqlite import 是这种类型应用程序的好方法吗?如果不是 - 有哪些替代方案?

  • 我一直在考虑服务器在压缩响应中返回实际的 sqlite 文件,或者返回压缩的 db 命令……或者 sqlite 不适合这种类型的应用程序?本地存储是否有更好的替代方案? .net 序列化程序/xml 等?

    感谢您的所有建议!

    最佳答案

    我的建议是异步完成你的工作——你很幸运,因为 C# 让这很容易。例如。

  • 开始后台下载;
  • 在下载对象时处理(背景)对象;
  • 在处理对象时插入(背景)对象;
  • 如果适用,为您添加的每个 X 对象更新 UI(从主线程);

  • 由于下载(大多数情况下,请参见注释)是网络绑定(bind)的,因此您的 CPU 将空闲几秒钟。考虑到您的下一步(处理)将受 CPU 限制,这是浪费时间。甚至更多,因为之后的步骤可能会受到 I/O 限制(数据库)。

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

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

    注#2:A zip 作为响应,文件也需要额外的时间(解压缩)。这不是您想要在下载后按顺序执行的操作(但您可以在下载时解压缩它)。

    关于json - monotouch应用程序的大数据下载和本地处理和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211355/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com