java除錯程式中每一步所用時間工具類
阿新 • • 發佈:2019-02-10
一般程式執行都參考每一步所用時間,用來反映程式的效能,TimeWatchUtil工具類就是實現此功能的工具。
package com.dyb.util; import java.util.ArrayList; import java.util.List; /** * *<p> *description:主要用來除錯程式,觀察程式執行每一步所用的時間 *</p> * @author * @since 2015-10-19 * @see */ public class TimeWatchUtil { /** * 建立開始時間 */ private long start; /** * 節點資料(一般儲存結束時間資料) */ private List<Object> sections; /** * 節點名稱 */ private List<Object> sectionNames; /** * 觀察名稱,下面包括很多的sectionNames,watchName屬於sectionNames的整體,便於觀察定位 */ private String watchName; public static TimeWatchUtil createTimeWatch(String watchName){ TimeWatchUtil timeWatch = new TimeWatchUtil(); timeWatch.watchName = watchName; return timeWatch; } protected TimeWatchUtil(){ sections = new ArrayList<>();//初始化sections sectionNames = new ArrayList<>();//初始化sectionNames start = System.currentTimeMillis();//當前系統開始時間 } public void addStep(String stepName){ sectionNames.add(stepName);//每一步節點的名稱 sections.add(Long.valueOf(System.currentTimeMillis()));//節點開始時間 } public String outputTimeList(){ watchName = watchName.trim(); StringBuffer outStr = new StringBuffer(); //整體觀察名稱 outStr.append("[TIMEWATCH] "); outStr.append(watchName); outStr.append(":"); outStr.append(" [DETAILS] "); //輸出每一個節點的名稱和花費時間 long last = start; for(int i=0;i < sections.size();i++){ long temp = ((Long)sections.get(i)).longValue(); outStr.append("" + (String)sectionNames.get(i) + ":" ); outStr.append((double)(temp - last)); outStr.append(" "); last = temp; } //總體花費時間 long totalWaste = 0; if(sections != null && sections.size() > 0){ totalWaste = ((Long)sections.get(sections.size()-1)).longValue() - start; } //將總體花費時間插入到名稱watchName的後面。"[TIMEWATCH] "和":"長度是13 outStr.insert(watchName.length() + 13, totalWaste); return outStr.toString(); } }
使用方法:junit單元測試
package com.dyb.util; import org.junit.Test; public class TestWatch { @Test public void test() throws InterruptedException{ TimeWatchUtil tw = TimeWatchUtil.createTimeWatch("TestWatch"); Thread.sleep(1000); tw.addStep("1"); Thread.sleep(2000); tw.addStep("2"); Thread.sleep(3000); tw.addStep("3"); System.out.println(tw.outputTimeList()); } }
輸出結果:[TIMEWATCH] TestWathc:6000 [DETAILS] 1:1000.0 2:2000.0 3:3000.0