私は、javaコード内のコードブロックが占める時間をログするユーティリティメソッドを用意しようとしています。Java - 有効期間をログするユーティリティメソッド
public static void logDuration(Runnable blockToExec
, String blockCode) {
Instant start = Instant.now();
blockToExec.run();
Duration duration = Duration.between(start, Instant.now());
/*
SAMPLE OUPUT of below print stmt (from JAVA API doc)
"20.345 seconds" -- "PT20.345S
"15 minutes" (15 * 60 seconds) -- "PT15M"
"10 hours" (10 * 3600 seconds) -- "PT10H"
"2 days" (2 * 86400 seconds) -- "PT48H"
*/
System.out.println("Time taken to complete <" + blockCode + "> - " + duration.toString());
}
メインコード:
Utils.logDuration(() -> {
List<PersonInfo> personInfos = persons.stream()
.flatMap(person -> person.getCurrAndPrevAddrs().stream()
.map(addr -> {
PersonInfo personInfo = new PersonInfo();
personInfo.setName(person.getName());
personInfo.setAge(person.getAge());
personInfo.setAddrs(addr);
return personInfo;
}
)).collect(Collectors.toList());
}, "Parsing and Splitting Persons list");
サンプルの出力、期間およびユーティリティメソッドを使用してメインコードをログに記録するためのユーティリティコードの下に
ユーティリティコードを見つけてください: パーシングと分割のユーザーリストを完了するまでにかかる時間 - PT0.012S
これは正常に動作しているようですが、この実装がコード実行に悪影響を与えることはありません。この実装の設計上の欠陥を教えてください。または、代替実装がある場合は、私に知らせてください。
[CodeReview](http://codereview.stackexchange.com/)この種の質問のための最良のStackExchangeになります:) – Aaron
System.nanoTimeを使用してください。もちろん、Runnableインスタンスを作成すること、そして何よりもコンソールに出力することで、コードが遅くなります。コード内のホットスポットに時間を置くと、それが重要になる可能性があります。あなたの設計におけるもう一つの問題は、何かを後退させたり、チェック例外をスローする必要がある何かを時間切れにすることができないことです。 –