试图测试2个JSON框架的性能 - 看起来是否正确?

kat*_*tit 0 java android json jackson gson

在我的应用程序中 - 我使用JSON进行序列化,到目前为止 - 我使用的是GSON.好吧,它有点慢,尤其是我加载对象的初始登录.

我探索了选择并找到了杰克逊.我通过循环和反序列化1000个样本对象进行了快速测试.杰克逊的速度提高了3倍-5倍.

现在,我构建了包装器,我可以在库之间切换,并开始测试,同时并排查看我从每个库得到的内容.这是我的代码:

public static <T> T fromJson(String json, Class<T> classOfT) throws Exception
    {
        T returnObject;

        Long milliseconds = (new Date()).getTime();
        returnObject = MyGsonWrapper.getMyGson().fromJson(json, classOfT);
        Long gsonTime = (new Date()).getTime() - milliseconds;

        milliseconds = (new Date()).getTime();
        returnObject = MyJacksonWrapper.getMyJson().readValue(json, classOfT);
        Long jacksonTime = (new Date()).getTime() - milliseconds;

if (gsonTime < jacksonTime)
        {
            Log.d(LOG_TAG, "------------- GSON Wins by " + Long.toString(jacksonTime - gsonTime) + " object: " + classOfT.getName());
        }
        else
        {
            Log.d(LOG_TAG, "------------- Jackson Wins by " + Long.toString(gsonTime - jacksonTime) + " object: " + classOfT.getName());
        }
Run Code Online (Sandbox Code Playgroud)

我的代码中是否有关于如何获得时间测量的流程?底线是 - 不同可以忽略不计,GSON证明是有效的,所以我不知道.现实生活与我最初的评价不同.杰克逊也不会感觉更快......

02-17 10:23:26.068: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 108 object: [Lcom.idatt.json.UserPreference;
02-17 10:23:28.006: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 34 object: [Lcom.idatt.json.MailTemplate;
02-17 10:23:29.154: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 27 object: [Lcom.idatt.json.MailItem;
02-17 10:23:36.514: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 599 object: [Lcom.idatt.json.TripUser;
02-17 10:23:50.260: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 1 object: [Lcom.idatt.json.TripUpdate;
02-17 10:24:00.455: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 45 object: java.lang.Integer
02-17 10:24:00.541: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 34 object: [Lcom.idatt.json.Device;
Run Code Online (Sandbox Code Playgroud)

Riy*_*lla 6

要尝试归一化由于VM动态行为以及暖/冷JVM引起的差异,请尝试对每个循环运行10,000次计时,然后查看差异.

另请注意,由于VM随机性,第一组代码运行将与第二组具有不同的时间; 所以翻转那些然后平均时间.

Net-net,我怀疑你会发现任何重大差异.

另外:如果毫秒产生很大的不同,请查看流解析Jackson和GSON提供更快的原始访问(但您将负责解析逻辑并重建您的对象,这可能是一个净损失)