返回顶部
首页 > 资讯 > 移动开发 >Android下Protobuff框架性能测试结果
  • 541
分享到

Android下Protobuff框架性能测试结果

性能测试结果性能测试测试Android 2022-06-06 12:06:31 541人浏览 薄情痞子
摘要

  Android 下Protobuff常用的框架有三个: protobuff自身,  square出的wire , protostuff   由于protob

  Android 下Protobuff常用的框架有三个: protobuff自身,  square出的wire , protostuff   由于protobuff会为每个属性生成大量不常用的方法,当程序比较复杂时容易超过android的60K个方法的上限, 所以本次测试未包括protobuff   测试逻辑是循环100次序列化100个元素的数组,并反序列化,求平均值,代码如下:   wire的测试代码: public void onClickButton(View view){ if (TestTask.isCancel){ TestTask.isCancel = false; TestTask.sumDeserializeTime = 0; TestTask.sumTime = 0; TestTask.runCount = 0; TextView text1 = (TextView) findViewById(R.id.textView2); text1.setText(""); new TestTask( (TextView) findViewById(R.id.textView2) , (TextView) findViewById(R.id.button1)).execute(); ((TextView)view).setText("测试中,点击中断"); }else{ ((TextView)view).setText("正在中断..."); TestTask.isCancel = true; } } static class TestTask extends AsyncTask<Void,Void,Long>{ long serializeTime=0; long deserializeTime=0; static long sumTime=0; static long sumDeserializeTime=0; static int runCount=0; static boolean isCancel=true; TextView text1; TextView btn; public TestTask(TextView text1,TextView btn) { this.text1 = text1; this.btn = btn; } @Override protected Long doInBackground(Void... params) { long startTime = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { List<ListItem> itemList = new ArrayList<ListItem>(); ListItem.Builder itemBuilder = new ListItem.Builder(); ListItem item; for (int j = 0; j < 100; j++) { item = itemBuilder.title("test Title"+i+":"+j) .remark("test Remark"+i+":"+j) .coverUrl("Http://pic.ozreader.com/abc.pic") .uri("PKB:TESTURI") .build(); itemList.add(item); } ScrollList.Builder listBuilder= new ScrollList.Builder(); ScrollList list = listBuilder.haveMore(false).tags(itemList).build(); byte[] dataBuffer = list.toByteArray(); serializeTime = System.currentTimeMillis()-startTime; Wire wire = new Wire(); try { ScrollList resultList = wire.parseFrom(dataBuffer, ScrollList.class); if (resultList == null){ Log.e("TEST", "resultList is null"); break; }else if (resultList.tags == null){ Log.e("TEST", "resultList.tags is null"); break; }else if (resultList.tags.size() <= 0){ Log.e("TEST", "resultList.tags is empty"); break; }else if (resultList.tags.size() != 100){ Log.e("TEST", "resultList.tags is wrong"); break; }else if (!resultList.tags.get(0).uri.equals("PKB:TESTURI")){ Log.e("TEST", "resultList.tags content is wrong"); break; } deserializeTime = System.currentTimeMillis()-startTime-serializeTime; } catch (ioException e) { e.printStackTrace(); } } return System.currentTimeMillis() - startTime; } @Override protected void onPostExecute(Long result) { sumTime += result; sumDeserializeTime += deserializeTime; runCount ++; text1.append("result:"+result+", serializeTime:"+serializeTime+", deserializeTime:"+deserializeTime+", runCount:"+runCount+", avg:"+sumTime/runCount+", avg deserializeTime:"+sumDeserializeTime/runCount+" "); if (isCancel){ text1.append("测试中断."); btn.setText("开始测试"); }else if (runCount < 100){ new TestTask(text1,btn).execute(); }else{ isCancel = true; text1.append("测试完成."); btn.setText("开始测试"); } } }protobuff的测试代码: public void onClickButton(View view){ if (TestTask.isCancel){ TestTask.isCancel = false; TestTask.sumDeserializeTime = 0; TestTask.sumTime = 0; TestTask.runCount = 0; TextView text1 = (TextView) findViewById(R.id.textView2); text1.setText(""); new TestTask( (TextView) findViewById(R.id.textView2) , (TextView) findViewById(R.id.button1)).execute(); ((TextView)view).setText("测试中,点击中断"); }else{ ((TextView)view).setText("正在中断..."); TestTask.isCancel = true; } } static class TestTask extends AsyncTask<Void,Void,Long>{ long serializeTime=0; long deserializeTime=0; static long sumTime=0; static long sumDeserializeTime=0; static int runCount=0; static boolean isCancel=true; TextView text1; TextView btn; public TestTask(TextView text1,TextView btn) { this.text1 = text1; this.btn = btn; } @Override protected Long doInBackground(Void... params) { long startTime = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { List<ListItem> itemList = new ArrayList<ListItem>(); ScrollList list = new ScrollList(); list.setHaveMore(false); list.setTagsList(itemList); ListItem item; for (int j = 0; j < 100; j++) { item = new ListItem(); item.setTitle("test Title"+i+":"+j); item.setRemark("test Remark"+i+":"+j); item.setCoverUrl("http://pic.ozreader.com/abc.pic"); item.setUri("PKB:TESTURI"); itemList.add(item); } LinkedBuffer buffer = LinkedBuffer.allocate(1024); byte[] dataBuffer = ProtobufIOUtil.toByteArray(list, ScrollList.getSchema(), buffer); serializeTime = System.currentTimeMillis()-startTime; ScrollList resultList = new ScrollList(); ProtobufIOUtil.mergeFrom(dataBuffer, resultList, ScrollList.getSchema()); if (resultList.getTagsList() == null){ Log.e("TEST", "resultList.tags is null"); break; }else if (resultList.getTagsList().size() <= 0){ Log.e("TEST", "resultList.tags is empty"); break; }else if (resultList.getTagsList().size() != 100){ Log.e("TEST", "resultList.tags is wrong"); break; }else if (!resultList.getTagsList().get(0).getUri().equals("PKB:TESTURI")){ Log.e("TEST", "resultList.tags content is wrong"); break; } deserializeTime = System.currentTimeMillis()-startTime-serializeTime; } return System.currentTimeMillis() - startTime; } @Override protected void onPostExecute(Long result) { sumTime += result; sumDeserializeTime += deserializeTime; runCount ++; text1.append("result:"+result+", serializeTime:"+serializeTime+", deserializeTime:"+deserializeTime+", runCount:"+runCount+", avg:"+sumTime/runCount+", avg deserializeTime:"+sumDeserializeTime/runCount+" "); if (isCancel){ text1.append("测试中断."); btn.setText("开始测试"); }else if (runCount < 100){ new TestTask(text1,btn).execute(); }else{ isCancel = true; text1.append("测试完成."); btn.setText("开始测试"); } } }   测试结果为(单位豪秒):   手机环境:魅族MX2   1) wire 1.5.1 ,网址 https://GitHub.com/square/wire   avg: 1860~1907 , 小值约为1500左右,极少出现, 全过程随机分布   avg deserializeTime: 9~10, 小值约为5,极少出现,全过程随机分布   2) protostuff 1.0.8 ,网址 https://code.Google.com/p/protostuff/   avg: 1100~1150,非常稳定 , 小值约为450左右,主要集中在前几次循环,循环10次后稳定在11XX左右,偶有600~800的情况,多次重复测试情况基本一致,观察自动GC并无内存泄漏的问题, 暂时不确定速度变化的原因.   avg deserializeTime: 6, 小值约为3,极少出现,主要集中在刚开始,绝大多数为5,偶有达到16的情况.   分析: wire的性能明显比不上protostuff, 速度也不太稳定,起落较大.  考虑到protostuff的开发模式是普通的pojo方式,比较方便,不像protobuff和wire的builder方式,超麻烦. 所以终推荐不是逻辑超复杂的企业app都使用protostuff .


--结束END--

本文标题: Android下Protobuff框架性能测试结果

本文链接: https://lsjlt.com/news/28771.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android下Protobuff框架性能测试结果
      android 下Protobuff常用的框架有三个: protobuff自身,  square出的wire , protostuff   由于protob...
    99+
    2022-06-06
    性能 测试结果 性能测试 测试 Android
  • Android ORM框架的性能简单测试
      前言   看了一下现在的android设备,性能都不差,懒得直接用sqlite,直接上ORM框架把,上网搜了一圈,觉得androrm, ormlite 这两个不错,当...
    99+
    2022-06-06
    性能 orm框架 orm 测试 Android
  • Apache下分析ab性能测试结果
    一直以来我都是用Loadrunner去做性能测试。Loadrunner实际上是一个很重的性能测试工具。他的功能很全面,是一把很好的牛刀。 如果我们只是需要对一个页面做简单的性能测试,使用Loadruner这把牛刀就不是一...
    99+
    2022-06-04
    Apache下分析ab性能测试结果 ab性能测试分析
  • Android下Junit测试框架配置
      我们的业务代码一般是放在一个新的包下面,这个业务类不能够通过右键run as java application,因为android项目只能运行在手机上的dalvak虚拟...
    99+
    2022-06-06
    junit 框架 Android
  • PHP中的性能测试框架
    随着互联网应用的不断发展,Web应用程序的性能越来越受到关注。在开发Web应用程序时,开发人员需要关注程序的运行效率和响应速度,及时发现并解决性能问题,以提供更好的用户体验。因此,选择一个性能测试工具来评估和优化Web应用程序的性能是非常重...
    99+
    2023-05-23
    框架 PHP 性能测试
  • Android下Junit测试框架的使用
      package com.example.javabasic;   public class CalculService {   public int add(int...
    99+
    2022-06-06
    junit 框架 Android
  • Apache下分析ab性能测试的结果是什么
    这篇文章给大家介绍Apache下分析ab性能测试的结果是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一直以来我都是用Loadrunner去做性能测试。Loadrunner实际上是一个很重的性能测试工具。他的功能很...
    99+
    2023-06-22
  • .Net性能测试框架Crank怎么使用
    这篇文章主要介绍“.Net性能测试框架Crank怎么使用”,在日常操作中,相信很多人在.Net性能测试框架Crank怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net性能测试框架Crank怎么使用...
    99+
    2023-06-21
  • 手写java性能测试框架第二版
    目录引言第二版的threadbase代码如下固定次数模式的压测虚拟类固定时间模式虚拟类HTTPrequestbase为基础的多线程类固定次数模式的多线程类固定时间模式的多线程类使用D...
    99+
    2024-04-02
  • ORM框架之Dapper简介和性能测试
    Dapper的简介 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码...
    99+
    2024-04-02
  • imba框架的简单介绍和性能测试
    这篇文章主要讲解了“imba框架的简单介绍和性能测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“imba框架的简单介绍和性能测试”吧!imba 简单介绍i...
    99+
    2024-04-02
  • .Net性能测试框架Crank的使用方法
    目录安装Crank创建Crank配置文件启动Crank-Agent启动Crank结果输出更多参考资料Crank 是微软新出的一个性能测试框架,集成了多种基准测试工具,如bombard...
    99+
    2024-04-02
  • Android客户端性能软件测试小结
      Android手机客户端的性能测试开展近3个月了,期间包括性能监测工具的开发周期和工具的投入使用和优化;客户端性能测试从这里起步,从这里开始。   一般情况,对于新生的产品...
    99+
    2022-06-06
    性能 小结 软件测试 测试 软件 Android
  • Android应用性能测试
      前提   所有的功能分支已完成   启动:   1. 启动入口:桌面正常启动,近运行启动,所有程序列表中启动,锁屏快捷启动   2. 其他入口:从其他程序开启应...
    99+
    2022-06-06
    性能 性能测试 测试 Android
  • Android性能测试初探
      功耗   · 功耗测试主要从以下几个方面入手进行测试   · 测试手机安装目标APK前后待机功耗无明显差异   · 常见...
    99+
    2022-06-06
    测试 Android
  • Android性能测试-内存
      前言:   近阶段都在探索android性能测试方面的东西,其中一个很重要的指标是内存。对于内存,主要是一些gc是不是及时,或者说一些引用有没有及时释放,有没有导致o...
    99+
    2022-06-06
    测试 Android
  • 手写java性能测试框架的实现示例
    目录引言代码分享基础类实现数据库的实现concurrent类引言 之前写过一个性能测试框架,只是针对单一的HTTP接口的测试,对于业务接口和非HTTP接口还无非适配,刚好前端时间工作...
    99+
    2024-04-02
  • 开源的性能测试框架p-unit怎么用
    本篇文章为大家展示了开源的性能测试框架p-unit怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。认识p-unit:一款开源的性能测试框架p-unit 是一款开放源码的性能测试框架,和 JUni...
    99+
    2023-06-03
  • 移动应用测试框架?AppGrader(Android)
      AppGrader是来自以色列的应用测试服务商uTest推出的一款测试产品。相比其他主流移动应用测试框架,AppGrader可能并不太为开发者所熟知,但它却能够为众多的...
    99+
    2022-06-06
    测试 框架 Android
  • Apache容器的实时性能测试:结果如何?
    Apache是目前全球最流行的Web服务器之一,也是开源社区中最著名的项目之一。由于其流行度和可靠性,很多企业都在使用Apache作为其Web服务器。然而,这样的高流量环境下,如何确保Apache服务器的性能稳定和可靠,成为了一个重要的问...
    99+
    2023-08-10
    apache 容器 实时
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作