StopWatch 计时器使用

StopWatch 计时器使用

StopWatch 类是 Spring 框架的一部分,它提供了简便的方式来测量代码块的执行时间。它可以统计出代码运行的时间和占比,方便观察需要优化哪一块的代码

StopWatch 使用

  1. 项目依赖
// 在此之前需要看下项目是否已经依赖 Spring 框架,如果是 sprngBoot 项目可以忽略该步骤
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.10.RELEASE</version> <!-- 请检查最新的Spring版本 -->
</dependency>
  1. 简单示例

    import org.springframework.util.StopWatch;
    
    // 这是一个简单的示例,展示了如何使用StopWatch类来测量任务的执行时间。
    // 你可以根据需要调整performTask方法中的代码块,以适应你要测量的实际任务。
    public class StopwatchExample {
        public static void main(String[] args) {
            // 创建StopWatch实例
            StopWatch stopWatch = new StopWatch();
    
            // 开始计时
            stopWatch.start();
    
            // 执行需要计时的代码块
            performTask();
    
            // 停止计时
            stopWatch.stop();
    
            // 打印计时信息
            System.out.println("任务执行时间: " + stopWatch.getTotalTimeMillis() + " milliseconds");
        }
    
        private static void performTask() {
            // 模拟一个耗时的任务
            for (int i = 0; i < 1000000000; i++) {
                // 一些任务代码
            }
        }
    }
    
  2. 使用案例 (比较耗时代码占比,从而分析对比优化代码)

import lombok.SneakyThrows;
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.opencv_core.Mat;
import org.springframework.util.StopWatch;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class A4TestSeep {

    @SneakyThrows
    public static void main(String[] args) {
        StopWatch sw = new StopWatch("计时器");
        String imgPath = "D:\\OneDrive - MSFT\\imgs\\imgs\\1.png";
        Java2DFrameConverter converter = new Java2DFrameConverter();

        sw.start("imread BufferedImage");
        Mat mat = opencv_imgcodecs.imread(imgPath);
        BufferedImage bufferedImage = converter.getBufferedImage(JavaCVUtil.matToFrame(mat));
        sw.stop();

        sw.start("read BufferedImage");
        BufferedImage bufferedImage2 = ImageIO.read(new File(imgPath));
        sw.stop();

        /**
         * StopWatch '计时器': running time = 3444284500 ns
         * ---------------------------------------------
         * ns         %     Task name
         * ---------------------------------------------
         * 3205154100  093%  imread BufferedImage
         * 239130400  007%  read BufferedImage
         */
        System.out.println(sw.prettyPrint());
        // 这个案例是获取 BufferedImage 对象的两种方式
        // 很明显使用 read 读取方式速度更快 所以使用 read 替代 imread 方式速度更快
    }
}
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值