jike_zeng 2019-09-05 17:54 采纳率: 50%
浏览 2331

并发使用ImageIO速度慢问题

主要实现:使用ImageIO把BufferedImage写入到ByteArrayOutputStream输出流,从输出流取出字节数组进行网络传输。

问题:

1、少量比如10个线程调用的时候特别快大概只要几十ms;

2、并发200个线程调用的时候就很慢,就是逐渐增加的那种,一些是几十ms,一些是几百ms,一些是几千ms;

3、做了些时间截点,发现就是调用ByteArrayOutputStream的时候花费的时间多,本来是IO的流,我想换成NIO,但搜了一圈发现没有把用java生成图片转换到NIO流的。

代码:

BufferedImage bufImg = qRcodeCommon(contentBytes,size);
        long startTime=System.currentTimeMillis();
        try {
            ImageIO.write(bufImg, imgType, bos);//缓存输出流接收生成的图片字节数组
            BASE64Encoder encoder=new BASE64Encoder();
            //System.out.println(encoder.encodeBuffer(bos.toByteArray()));
            String str=encoder.encodeBuffer(bos.toByteArray());
            bos.reset();
            System.out.println("写出数组:"+(System.currentTimeMillis()-startTime)+"ms");
            return str;
        }catch (IOException e){
            e.printStackTrace();
            System.out.println("缓存图片出现IO异常");
        }

缩短时间,提高性能,各位大佬帮忙看看!

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-09-06 08:00
    关注

    IO操作瓶颈不在cpu,在延迟一定的情况下,并发数到一定,就达到性能最高,再增加线程,只会更差。一般的并发数在5~20左右,你应该在这个范围尝试

    评论

报告相同问题?

悬赏问题

  • ¥15 github符合条件20分钟秒到账,github空投 提供github账号可兑换💰感兴趣的可以找我交流一下
  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?