- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目前,这就是我获取流程完成时间的方式。
long start = System.currentTimeMillis();
process();
long end = System.currentTimeMillis();
long duration = stop - start;
System.out.println(duration);
我目前面临的问题是 process()
会在没有电源时被我的电脑 hibernate 中断(暂停)(我的工作环境在外面所以我必须使用电池)所以只要我在插入时重新启动电脑,它就可以继续。我完全知道我会得到一个错误的持续时间,例如,由于进程暂停(在 hibernate 期间)我无法重新启动大约 2 小时,因为这意味着额外的 2 小时将通过 CMOS 电池由 CPU 时钟计算随时备份
long end = System.currentTimeMillis();
达到了。无论进程被分别暂停,如何才能获得准确的持续时间。
最佳答案
所以你的问题是“这个过程花了多少挂钟时间,没有 hibernate 时间”。好吧,挂钟时间很容易获得,但您真的没有机会知道 hibernate 是否发生。
但是...
如果您的流程是一组离散的步骤,您可以执行如下操作
List<Duration> durations = new ArrayList<>();
for(Step step : steps) {
Instant stepStart = Instant.now();
process(step);
durations.add(Duration.between(stepStart, Instant.now()));
}
long totalMillis = durations.stream()
.mapToLong(Duration::toMillis)
.filter(ms -> ms < 1000) // Cut off limit, to disregard hibernate steps
.sum();
这对每个步骤分别计时,如果一个步骤的时间超过 1 秒,则不计入总数。您还可以为这些步骤使用“平均”时间,这样最终结果会更真实一些(当然这取决于步骤数、单个步骤的假定运行时间等)。
这仅在对“太多”时间有一个很好的限制时才有效,并且它提供的结果不太准确。如果您正在使用 BigInteger
做某事,具有较大值的步骤可能会花费更多时间,因此单个截止值将不起作用(尽管您可以考虑某种动态截止值,基于输入)。
最便宜、最简单和最好的解决方案:在服务器上运行代码。
关于java - 如何测量频繁中断的流程/方法的准确执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58409117/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!