Minecraft-Plugin-YinwuChat icon indicating copy to clipboard operation
Minecraft-Plugin-YinwuChat copied to clipboard

关于使用Gson的一个性能建议

Open Karlatemp opened this issue 4 years ago • 0 comments

首先,我在看 org.lintx.plugins.yinwuchat.bungee.json.InputBase 的时候发现了以下代码

 public static InputBase getObject(String json){
        try {
            JsonParser parser = new JsonParser();
            JsonElement jsonTree = parser.parse(json);
// .......
                            Gson gson = new Gson();
                            inputModel = gson.fromJson(json,new TypeToken<InputCoolQ>(){}.getType());
// .....

以下是关于 性能 的建议而不是bug提交

Gson 已经提供 JsonParser.parseString(String) 方法, 不需要new一个JsonParser

不应该每次都 new Gson(), 这会拖慢代码执行效率, 原因是 每次生成gson都会重新生成一系列工厂 就在这生成的过程中拖慢了执行效率, 你应该使用 private static final Gson GSON_INSTANCE = new Gson(); 将其存储起来, 像下面这样

public class InputBase {
  private static final Gson GSON_INSTANCE = new Gson();
  private static final Type INPUT_COOLQ_TYPE = new TypeToken<InputCoolQ>(){}.getType();
  //.......
                            inputModel = GSON_INSTANCE.fromJson(json, INPUT_COOLQ_TYPE);
  //.......
}

虽然这只是一个类,但是我推荐你查找每个类似的地方,都将其替换掉,为了性能考虑

Karlatemp avatar Apr 14 '20 16:04 Karlatemp