代码优化工具-测试程序执行时间-IDEAdebug+StopWatch

news2024/11/15 8:24:04

参考:
[技巧]IDEA的debug+StopWatch监测程序运行时间

添加链接描述

1创建类StopWatchExpand

 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.StopWatch;

 import java.text.NumberFormat;

 /**
 * 检测程序片段运行时间拓展
 *
 * @author sdevil507
 * created on 2021/5/27
 */
@Slf4j
public class StopWatchExpand {

 /**
  * StopWatch实例
  */
 private static StopWatch STOP_WATCH;

 /**
  * StopWatch实例初始化
  */
 public static void init() {
  STOP_WATCH = new StopWatch("运行时间");
 }

 /**
  * 开启计时
  *
  * @param taskName 任务名称
  * @return 提示字符串
  */
 public static String start(String taskName) {
  STOP_WATCH.start(taskName);
  return "[ 任务: " + taskName + " ]" + " 监测运行时间开始......";
 }

 /**
  * 结束计时
  */
 public static void stop() {
  STOP_WATCH.stop();
 }

 /**
  * 格式化的统计输出
  *
  * @return 统计输出
  */
 public static String prettyPrint() {
  // 获取运行的毫秒数与秒数
  long totalTimeMillis = STOP_WATCH.getTotalTimeMillis();
  double totalTimeSeconds = STOP_WATCH.getTotalTimeSeconds();
  // 编写总结
  String shortSummary = "StopWatch '" + STOP_WATCH.getId() + "': running time [ " + String.format("%9s", totalTimeMillis) + "ms / " + String.format("%9.3f", totalTimeSeconds) + "s ]";
  StringBuilder sb = new StringBuilder();
  sb.append("---------------------------------------------------------------\n");
  sb.append(shortSummary);
  sb.append('\n');
  sb.append("---------------------------------------------------------------\n");
  sb.append("       ms           s      %      Task name\n");
  sb.append("---------------------------------------------------------------\n");
  NumberFormat pf = NumberFormat.getPercentInstance();
  pf.setMinimumIntegerDigits(3);
  pf.setGroupingUsed(false);
  for (StopWatch.TaskInfo task : STOP_WATCH.getTaskInfo()) {
   sb.append(String.format("%9s", task.getTimeMillis())).append("   ");
   sb.append(String.format("%9.3f", task.getTimeSeconds())).append("   ");
   sb.append(pf.format((double) task.getTimeMillis() / totalTimeMillis)).append("      ");
   sb.append(task.getTaskName()).append("\n");
  }
  return sb.toString();
 }
}

2在需要查看代码的时间的地方打断点并进去
(0)在最开始的地方设置init:StopWatchExpand.init();
(1)在代码开始段设置start:StopWatchExpand.start("获取basic");
在这里插入图片描述
(2)在代码末尾段设置
StopWatchExpand.stop(); StopWatchExpand.prettyPrint();
在这里插入图片描述
可以在每个需要看时长的地方加上start和stop【这两个是一对,前提是一定要init】,最后调用的prettyPrint()是第一步自定义的方法,会格式化打印在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一个基于springboot+vue的在线租房与招聘平台系统代码 房屋租赁系统

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

使用navicate快速将Excel中的数据导入到数据库

表名称上右键,导入向导 这种方式速度还是很快的,18万条数据,3分钟左右就导入进去了。

基于人人开源脚手架快速开发的一个图书馆管理系统,功能强大,安全好用。

概述 基于人人开源脚手架快速开发的一个图书馆管理系统,功能强大,安全好用。 详细 项目简介 前后端分离版的图书馆管理系统。基于人人开源开发脚手架,简化开发提升开发速度。支持下载word催还单 效果显示 【登录】 管理员/普通用户 &am…

示波器电流探头消磁如何正确操作

示波器电流探头是测量电路中电流的重要工具。由于频繁使用和磁场的影响,电流探头经常会受到磁化影响,从而影响测量的准确性。消磁是保证探头测量精度的必要步骤。 磁化是指物体在外磁场作用下,内部磁性微观区域重新排列并形成剩余磁场的过程…

【CUDA OUT OF MEMORY】【Pytorch】计算图与CUDA OOM

计算图与CUDA OOM 在实践过程中多次碰到了CUDA OOM的问题,有时候这个问题是很好解决的,有时候DEBUG一整天还是头皮发麻。 最近实践对由于计算图积累导致CUDA OOM有一点新的看法,写下来记录一下。包括对计算图的一些看法和一个由于计算图引发…

小商户记账系统企业财务管理系统 uniapp微信小程序

本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言,应用ssm框架, MySQL为后台数据库。来完成对系统的设计。整个开发过程首先对小商户记账系统进行需求分析。 小商户记账系统小程序主要是为了提高用户…

炫酷的开关--20230907

Night && Day Toggle ☀️/&#x1f319; [Completed It!] HTML&#xff1a; <div class"controls"><label for"sync">Sync <body></label><input id"sync" type"checkbox"/> </div> &l…

四川玖璨电子商务有限公司:抖店怎么运营爆款

如今&#xff0c;随着网络的普及和电商平台的兴起&#xff0c;越来越多的人开始关注和尝试开设自己的网店。然而&#xff0c;在面对激烈的市场竞争中&#xff0c;如何让自己的抖店脱颖而出&#xff0c;成为爆款产品的运营者&#xff0c;是每个抖店经营者迫切需要解决的问题。 …

[PG]将一行数据打散成多行数据

原始数据 比如有如此表结构定义: 假如查询数据如下&#xff1a; select dt as "日期",bj_count as "北京", sh_count as "上海",gz_count as "广州", sz_count as "深圳" from city_stats order by dt--------------------…

Linux密码遗忘?别慌!解锁你的系统小秘籍!

很多朋友经常会忘记Linux系统的root密码&#xff0c;linux系统忘记root密码的情况该怎么办呢&#xff1f;重新安装系统吗&#xff1f;当然不用&#xff01;进入单用户模式更改一下root密码即可。 步骤如下&#xff1a; 重启linux系统 3 秒之内要按一下回车&#xff0c;出现如…

基于Java+SpringBoot+Vue前后端分离在线互动学习网站设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

LeetCode寻找两个有序数组的中位数打败100%人

&#x1f600;前言 在本文中&#xff0c;我们将深入研究一种复杂的算法问题&#xff1a;查找两个有序数组的中位数。这是一个经典的计算问题&#xff0c;通常出现在编程面试和算法挑战中。我们将首先探讨一种常见的暴力解决方法&#xff0c;然后逐步引入更高效的解决方案&#…

外滩大会今日开幕 生成式AI成为热议话题

2023 Inclusion外滩大会9月7日在上海黄浦世博园正式开幕。这场以“科技创造可持续未来”为主题的大会为期三天&#xff0c;近20位“两院”院士、诺贝尔奖和图灵奖得主&#xff0c;全球超500位有影响力的科技领军企业和专家学者&#xff0c;将在此带来一场科技、人文和产业的思想…

第5章 驱动模块传参实验(iTOP-RK3568开发板驱动开发指南 )

经过前两章实验的实战操作&#xff0c;我们已经完成最简单的helloworld驱动实验和模块驱动实验&#xff0c;加载模块可以使用“insmod”函数&#xff0c;使用“insmod”函数进行模块加载时也能进行参数的传递。运用得当可以极大提升内核测试速度。本节就来学习一下如何进行驱动…

Kafka入门与安装

为什么要用消息中间件&#xff1f; 异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信。传统的做法有两种1.串行的方式&#xff1b;2.并行方式。 串行方式&#xff1a;将注册信息写入数据库成功后&#xff0c;发送注册邮件&#xff0c;再发送注…

element-ui dialog弹窗 设置点击空白处不关闭

根据官网提供方法 场景&#xff1a;vue实现的网站有两个弹窗同时出现时&#xff0c;关闭报警&#xff0c;批量进度条弹窗也关闭了&#xff0c; 1、每一个页面都有可能出现的报警弹窗&#xff0c; 2、页面a批量操控硬件添加操作的进度条弹窗 开始以为是因为点击报警弹窗&#…

划片机实现装片、对准、切割、清洗到卸片的自动化操作

划片机是一种用于切割和分离材料的设备&#xff0c;通常用于光学和医疗、IC、QFN、DFN、半导体集成电路、GPP/LED氮化镓等芯片分立器件、LED封装、光通讯器件、声表器件、MEMS等行业。划片机可以实现从装片、对准、切割、清洗到卸片的自动化操作。 以下是划片机实现这些操作的步…

CSS 设置渐变背景 CSS 设置渐变边框

一、css渐变背景添加透明度opacity css渐变背景经常会在项目开发中遇到&#xff0c;此时UI如果给出的是单一的渐变背景&#xff08;没有背景透明度&#xff09;&#xff0c;这个我们会很快的写出代码&#xff0c;如下: <div class"btn">这是一个按钮</div&…

datagrip 相关数据连接信息无缝迁移

背景 因为公司换电脑了&#xff0c;接触的项目比较多&#xff0c;不同项目&#xff0c;不同环境的数据库连接有好几十个&#xff0c;如果在新电脑上挨个重新连接一遍劳心劳力&#xff0c;所以想看一下能不能直接将之前保存的连接信息直接迁移到新的电脑上面。 为此&#xff0c…

Apipost压测参数化如何使用

Apipost7.2.1版本一键压测新增参数化功能 如何使用&#xff1f; 这里我们用一个多用户登录情况来演示&#xff0c;需要准备包含用户名密码的CSV文件 创建CSV文件&#xff1a; 新建一个excel表格&#xff0c;在表格中新建username password&#xff0c;在下方输入每个账号和…