OA信用盘源码搭建下载

OA信用盘源码搭建下载

hubawl.com

  • 看了一下FlatBuffers,似乎挺强大,不过暂时没有测试是不是真有那么快,不过JSON解析应该没有那么慢,于是乎测试了一下平时用到的谷歌的Gson 阿里巴巴的FastJson以及安卓原生自带的org.JSON 解析的速度;
  • 先写个单元测试吧:
@org.junit.Test
    public void TestSpeed2() throws Exception { FoodDao foodDao = new FoodDao(); List<Foods> foods = foodDao.selectAll(Foods.class); System.out.println("-------------gson-----------"); long gsonStart = System.currentTimeMillis(); gsonC(foods);// 用Gson进行拆包 和 解析 long gsonEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (gsonEnd - gsonStart)); System.out.println("-------------gson-----------"); System.out.println("-------------FastJson-----------"); long fastStart = System.currentTimeMillis(); fastJsonC(foods);// 用FastJson进行拆包 和 解析 long fastEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (fastEnd - fastStart)); System.out.println("-------------FastJson-----------"); System.out.println("-------------JSON-----------"); long jsonStart = System.currentTimeMillis(); jsonC(foods);// 用org.json进行拆包 和 解析 long jsonEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (jsonEnd - jsonStart)); System.out.println("-------------JSON-----------"); }
  • 查看上面的标注①的地方可以看到我这先设置的查询的条数为50条,稍后修改这即可更改为查询100、500、1000、5000、1万、2万条(不要问我哪儿来那么多数据……我之前写的博客上说了曾经扒到过10W+的数据……)
  • 然后列一下分别是查询50条、100条、500条、1000、5000、1万、2万条数据各个类库分别需要多少时间

    1. 50


2. 100


3. 500


4. 1000


5. 5000


6. 1万


7. 2万

  • 一开始测试的时候我没有取平均值,只是运行一下看看解析50条数据哪一个更快一点,竟然让我出乎意料,竟然是Android自带的jar包org.JSON!!!Gson甚至比FastJson都快这不符合情理啊……不是一直都说是阿里巴巴的FastJson最快的嘛!!!!后来我将解析50条数据提高到100、500、1000条……数据的时候就发现,随着解析数据量的增大然后逐渐的发现FastJson的优势出来了,而org.JSON却很慢了
  • 分析出现上面的结果的原因,为什么在数据量少的时候,org.json 类库拆包解析的更快呢,仔细看源码会发现:org.json在进行解析的时候需要通过for循环依次的将数据取出来放到指定对象的成员变量中 是for循环的缘故,当for循环的次数太多的时候肯定就相当耗时了,在数据量小的时候却表现的比较出色
  • 然而这样解析有着明显的问题,因为每一次测试的时间都不相同,因为不是很稳定,所以应该取一下平均值,我这就对 拆包解析的方法里加了个50次的循环
@org.junit.Test
    public void TestSpeed() throws Exception { List<Foods> foods = foodDao.selectAll(Foods.class); System.out.println("-------------gson-----------"); long gsonStart = System.currentTimeMillis(); gsonC(foods);//用Gson进行拆包 和 解析 并循环操作50次 long gsonEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (gsonEnd - gsonStart) / 50); System.out.println("-------------gson-----------"); System.out.println("-------------FastJson-----------"); long fastStart = System.currentTimeMillis(); fastJsonC(foods);// 用FastJson进行拆包 和 解析 并循环操作50次 long fastEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (fastEnd - fastStart) / 50); System.out.println("-------------FastJson-----------"); System.out.println("-------------JSON-----------"); long jsonStart = System.currentTimeMillis(); jsonC(foods);// 用org.json进行拆包 和 解析 并循环操作50次 long jsonEnd = System.currentTimeMillis(); System.out.println("gsonGaps:" + (jsonEnd - jsonStart) / 50); System.out.println("-------------JSON-----------"); } private synchronized void jsonC(List<Foods> foods) throws Exception { for (int j = 0; j < 50; j++) { String jsonString = JsonTools.createJsonString("json", foods); JSONObject object = new JSONObject(jsonString); JSONArray array = object.getJSONArray("json"); List<Foods> list2 = new ArrayList<Foods>(); for (int i = 0; i < array.length(); i++) { JSONObject foodObject = (JSONObject) array.get(i); Foods foods2 = new Foods(foodObject.getInt("id"), foodObject.getString("cookclass"), foodObject.getString("name"), foodObject.getString("description"), foodObject.getString("food"), foodObject.getString("img"), foodObject.getString("images"), foodObject.getString("keywords"), foodObject.getString("message"), foodObject.getString("url")); list2.add(foods2); } String s3 = list2.toString(); } } private synchronized void fastJsonC(List<Foods> foods) { for (int i = 0; i < 50; i++) { String fastString = FastJsonTools.createJsonString(foods); String s2 = FastJsonTools.createJsonToListBean(fastString, Foods.class).toString(); } } private synchronized void gsonC(List<Foods> foods) { for (int i = 0; i < 50; i++) { String gsonString = GsonTools.createJsonString(foods); String s1 = GsonTools.StringTolist(gsonString, Foods[].class) .toString(); } }
  • 然后贴一下解析1万条数据2万条数据100条数据各个类库所用的的平均时间(这个时间不包括查询数据库所用的时间)

    1. 1万 

    2. 2万 

    3. 100条 

我10万+的数据大概是40多M,也就是说1万条数据的话大概是4M,就从我的测试结果来看,还真不知道他们那个解析4Mjson数据需要用大概2000毫秒的时间,我测试的2万条数据也就是大概8M的json数据,即使是用org.json来拆包、解析都要比这个时间要短很多,更何况我们还有出色的fastJson等优秀类库。 
经过这次测试之后,确实验证了阿里巴巴的FastJson相对来说是挺快的,如果用json解析的话,还是建议用fastjson吧 

猜你喜欢

转载自www.cnblogs.com/sadasd232323/p/9225125.html