2017-03-02 138 views
0

我目前正在尝试使用Jackson数据绑定库从Map创建52个Java对象,并且它目前总共花费3.518秒来转换所有52个对象,这似乎非常缓慢。我不确定为什么会出现这种情况。这是一种异常现象还是可以做些什么来使这些转换更快?使用Jackson Object Mapper将地图转换为Java对象的速度很慢

这里是我的Java对象类:

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; 
} 

这里是我试图转换到类地图:

{ 
    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来计算每个对象转换的持续时间,似乎每个转换需要一个平均值o f 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: 
+0

你只是指出了这一点,或者你有怀疑吗? –

+2

你能发布更多的代码吗?看来你正在为每次转换创建一个ObjectMapper ......这确实很慢。 – Okas

+0

@Okas这实际上是问题!我现在使用ObjectMapper的单个实例,并且在同一操作中,我已经从3500+ ms变为52ms。谢谢。 – damememan

回答

1

不要为每次转换创建ObjectMapper,而是创建一个实例并将其用于所有转换。 ObjectMapper创建是一个非常昂贵的操作。