StopWatch 计时器使用
StopWatch
类是 Spring 框架的一部分,它提供了简便的方式来测量代码块的执行时间。它可以统计出代码运行的时间和占比,方便观察需要优化哪一块的代码
StopWatch 使用
- 项目依赖
// 在此之前需要看下项目是否已经依赖 Spring 框架,如果是 sprngBoot 项目可以忽略该步骤
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10.RELEASE</version> <!-- 请检查最新的Spring版本 -->
</dependency>
-
简单示例
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++) { // 一些任务代码 } } }
-
使用案例 (比较耗时代码占比,从而分析对比优化代码)
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 方式速度更快
}
}