首页 > 其他分享 >更优雅的计算方法或接口耗时

更优雅的计算方法或接口耗时

时间:2023-01-05 16:56:45浏览次数:38  
标签:AuthorityController debug sw 接口 耗时 任务 StopWatch 计算方法

一、背景

开发时,记录某方法或任务的执行时间,或者一段代码的执行时间,如果使用System.currentTimeMillis(),很麻烦且不直观。
spring-framework和apache-common包,都提供了StopWatch类,类似计时器的逻辑封装的工具类,用法类似,spring封装的支持多任务计时,apache提供的仅支持单任务。

二、示例

1.输出方法总耗时(秒)

	StopWatch sw = new StopWatch();
	sw.start();
	// 逻辑处理
	Thread.sleep(6000);
	sw.stop();
	logger.debug("总耗时:{}秒",sw.getTotalTimeSeconds());

输出结果:

09:35:06.534 [main] INFO com.slup.authority.controller.AuthorityController - 总耗时:6.0072394秒

2.多任务计时

	StopWatch sw = new StopWatch();
	sw.start("任务A");
	// 任务A逻辑处理
	Thread.sleep(3000);
	sw.stop();
	sw.start("任务B");
	// 任务B逻辑处理
	Thread.sleep(1000);
	sw.stop();
	logger.debug("总耗时:{}秒",sw.getTotalTimeSeconds());
	for(TaskInfo task: sw.getTaskInfo()) {
		logger.debug("[{}]耗时:{}秒",task.getTaskName(),task.getTimeSeconds());
	}

输出结果:

09:49:56.517 [main] INFO com.slup.authority.controller.AuthorityController - 总耗时:4.0179818秒
09:49:56.522 [main] INFO com.slup.authority.controller.AuthorityController - [任务A]耗时:3.0099562秒
09:49:56.522 [main] INFO com.slup.authority.controller.AuthorityController - [任务B]耗时:1.0080256秒

3.其他方法

  1. sw.prettyPrint() 优雅格式输出所有任务耗时及占比
  2. sw.getTaskInfo() 获取所有任务对象
  3. sw.isRunning() 判断当前计时器是否正在计时
  4. sw.shortSummary() 返回简短的总耗时描述
  5. sw.currentTaskName() 获取当前正在执行的任务名称

4.总结

  1. 统计代码的执行效率,推荐使用spring-framework的StopWatch对象,方法足够满足使用。
  2. 希望大家更多地在开发、调试的环节,就多多关注,特别是涉及多次复杂查询、内部间接口调用或者三方接口调用的情况。
  3. 如果觉得代码优化后不存在效率问题,则不需要将统计耗时的代码提交。
  4. 除非提前已知较大可能存在效率问题(比如第三方接口),否则使用debug级别日志即可,没必要使用info日志。

标签:AuthorityController,debug,sw,接口,耗时,任务,StopWatch,计算方法
From: https://www.cnblogs.com/wmy666/p/17028059.html

相关文章

  • C#调用VC的DLL的接口函数参数类型转换一览表
    handle---------IntPtrhwnd-----------IntPtrchar*----------stringint*-----------refintint&-----------refintvoid*----------IntPtrunsignedchar*-----refbyt......
  • 接口测试常见面试题
    为什么要做接口测试?如下图一个提现功能比如这个输入框,平常拿到这个web页面,会对输入框做用例设计:输入一个负数(如:-100),点提交输入金额为0(如:0),点提交输入金额为0-100的数......
  • python接口自动化系列 - openpyxl库封装04
    前言为了更好的让openpyxl在工作中使用,将openpyxl的常用操作封装起来,这样不仅复用性高,而且阅读性好fromopenpyxlimportload_workbookfromopenpyxl.stylesimportP......
  • 生产环境下包含refresh_Token接口报错nginx配置
    一、问题现象使用nginx代理项目,生产环境下,包含refresh_Token的接口报错,开发环境下却正常。二、原因nginx默认request的header内容参数下划线时会自动忽略掉,需要添加以下......
  • Python 调用Zoomeye搜索接口
    钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合、整理,打造了......
  • 嵌入式:I/O接口扩展
    嵌入式:I/O接口扩展S3C2410A共有117个多功能复用输入输出口(I/O口),分为8组PORTA~PORTH。PORTA除了作为功能口外,它只作为输出口使用;其余的PORTB~PORTH都可以作为输入输出口使......
  • python接口自动化系列 - openpyxl基本使用03
    一、openpyxl简单介绍一个Python库,用于读取/写入Excel2010 xlsx 、xlsm 、xltx 、xltm 文件不能操作 xls 文件Workbook:excel工作表Sheet:工作表中的一张表......
  • python接口自动化系列 - requests库的基础使用01
    一、安装利用pip安装:$pipinstallrequestsrequests方法法描述delete(url, args)发送DELETE请求到指定urlget(url, params,args)发送GET请求......
  • python脚本调用CANoe COM Server接口
    《CANoe开发入门到精通》源码:#-----------------------------------------------------------------------------#Example:TestFeatureSetviaPython##This......
  • 软件开发入门教程网 Search之C++ 接口(抽象类)
       C++基本的输入输出   ......