的我有一段代码,需要重复计算下面...性能BigDecimal.valueOf(双d)
double consumption = minConsumption + (Math.random() * ((maxConsumption - minConsumption) + 1));
currentReading = currentReading.add(BigDecimal.valueOf(consumption)).setScale(2, RoundingMode.HALF_EVEN).stripTrailingZeros();
这是用于产生用于检测随机肥胖型信息。它似乎比我预期的要慢,我发现缓慢的部分是BigDecimal.valueOf(consumption)
,并且由于内部发生的Double.toString()
调用而缓慢。
总体要求是生成一个随机在最小值和最大值之间的消耗值。然后将其添加到currentReading以获得新的读数。
有什么办法可以提高这个性能吗?也许通过避免double - > BigDecimal转换。我需要的结果是一个BigDecimal,但我不介意如何在这之前完成随机计算。
你的意思BigDecimal.valueOf(双)? –
是什么让你觉得这是一个性能问题?你有什么数据吗?如果不是,我怀疑你有过早的优化。 – duffymo
我已经运行它,并暂停了很多。调试程序在Double.toString()代码中停止该调用的90%时间。 –