使用 Jackson Object Mapper 将 Map 转换为 Java 对象非常慢
Converting Map to Java object using Jackson Object Mapper is very slow
我目前正在尝试使用 Jackson 数据绑定库从 Map 创建 52 Java 个对象,目前转换所有 52 个对象总共需要 3.518 秒,这似乎非常慢。我不确定为什么会这样。这是异常现象还是可以采取一些措施来加快这些转换?
这是我的 Java 对象 class:
public class MoodDatapoint extends DocumentModelHelper {
@JsonProperty(value = "happiness")
private int happiness;
@JsonProperty(value = "stress")
private int stress;
@JsonProperty(value = "pain")
private int pain;
@JsonProperty(value = "timestamp")
private long timestamp;
@JsonProperty(value = "lat")
private double lat;
@JsonProperty(value = "lng")
private double lng;
@JsonProperty(value = "comment")
private String comment;
@JsonProperty(value = "event_name")
private String eventName;
@JsonProperty(value = "is_before")
private boolean isBefore;
@JsonProperty(value = "related_event_id")
private String relatedEventID;
}
这是我要转换成 class:
的地图
{
stress=0,
pain=0,
happiness=10,
timestamp=1488464269384,
is_before=false,
lng=-79.6208645,
event_name=null,
comment=,
lat=43.6462939,
related_event_id=null
}
以及我将地图转换为对象的代码:
ObjectMapper m = new ObjectMapper();
MoodDatapoint datapoint = m.convertValue(map, MoodDatapoint.class);
用logcat计算每次对象转换的时长,好像每次转换平均需要62毫秒:
...
D/M DATAPOINT CONVERSION DURATION: 68
D/M DATAPOINT CONVERSION DURATION: 45
D/TOTAL DURATION (S): 3550
D/AVG DURATION: 68
D/Total objects:
不要为每次转换都创建 ObjectMapper,而是创建一个实例并将其用于所有转换。 ObjectMapper 创建是一项非常昂贵的操作。
我目前正在尝试使用 Jackson 数据绑定库从 Map 创建 52 Java 个对象,目前转换所有 52 个对象总共需要 3.518 秒,这似乎非常慢。我不确定为什么会这样。这是异常现象还是可以采取一些措施来加快这些转换?
这是我的 Java 对象 class:
public class MoodDatapoint extends DocumentModelHelper {
@JsonProperty(value = "happiness")
private int happiness;
@JsonProperty(value = "stress")
private int stress;
@JsonProperty(value = "pain")
private int pain;
@JsonProperty(value = "timestamp")
private long timestamp;
@JsonProperty(value = "lat")
private double lat;
@JsonProperty(value = "lng")
private double lng;
@JsonProperty(value = "comment")
private String comment;
@JsonProperty(value = "event_name")
private String eventName;
@JsonProperty(value = "is_before")
private boolean isBefore;
@JsonProperty(value = "related_event_id")
private String relatedEventID;
}
这是我要转换成 class:
的地图 {
stress=0,
pain=0,
happiness=10,
timestamp=1488464269384,
is_before=false,
lng=-79.6208645,
event_name=null,
comment=,
lat=43.6462939,
related_event_id=null
}
以及我将地图转换为对象的代码:
ObjectMapper m = new ObjectMapper();
MoodDatapoint datapoint = m.convertValue(map, MoodDatapoint.class);
用logcat计算每次对象转换的时长,好像每次转换平均需要62毫秒:
...
D/M DATAPOINT CONVERSION DURATION: 68
D/M DATAPOINT CONVERSION DURATION: 45
D/TOTAL DURATION (S): 3550
D/AVG DURATION: 68
D/Total objects:
不要为每次转换都创建 ObjectMapper,而是创建一个实例并将其用于所有转换。 ObjectMapper 创建是一项非常昂贵的操作。