【发布时间】:2017-05-05 14:40:36
【问题描述】:
我正在使用 google GSON API 为我的 Android 项目解析 JSON 文件,但我遇到了性能问题。
这里是我使用谷歌 GSON API 解析 JSON 的源代码:
public void loadJsonInDb(String path){
InputStream isJson = context.getAssets().open(path);
if (isJson != null) {
int sizeJson = isJson.available();
byte[] bufferJson = new byte[sizeJson];
isJson.read(bufferJson);
isJson.close();
String jsonStr = new String(bufferJson, "UTF-8");
JsonParser parser = new JsonParser();
JsonObject object = parser.parse(jsonStr).getAsJsonObject();
JsonArray array = object.getAsJsonArray("datas");
Gson gson = new Gson();
for(JsonElement jsonElement : array){
MyEntity entity = gson.fromJson(jsonElement, MyEntity.class);
// Do insert into Db stuffs
}
}
}
这样做的问题是,在解析后我必须通过 JsonArray 使用 for 循环并执行所需的操作(这是在 SQLite DB 中插入数组中每个元素的 ORMLite),我想知道如果可以在解析期间在航班上执行插入,而不是等待计算数组。我在文档中看到,也许JsonStreamParser 可以完成这项工作,但我不知道如何使用它。
【问题讨论】:
-
可能数据库插入是一个瓶颈。您使用内容提供程序还是直接插入?你使用 beginTransaction() endTRansaction() 吗?
-
Indead DB 插入是瓶颈之一,实际上我测量了处理时间。 JSON 解析:17 秒,数据库插入:50 秒。这就是为什么我想在解析过程中在飞行中插入数据到数据库中,这将是一种并行处理(解析+数据库插入)。我不使用 beginTransaction 或 endTRansaction,它会提高性能吗?
-
我有类似的问题。约 1000 条记录的 Json 数组。如果使用内容提供商插入时间 ~ 1 分钟。如果直接访问 db(没有内容提供者)并在单个事务中插入大约需要 10 秒。