У меня есть класс таймера, который фиксирует время распаковки и десериализации для одного из моих процессов.Я использую параллельный поток для выполнения вышеизложенного и хотел бы узнать общее время распаковки и время десериализации для всех моих объектов
Я звоню getVersionedRawDealNew (), который выполняет распаковку и десериализацию для каждой сделки.
Время преобразования намного больше, чем время, затрачиваемое на весь метод для обработки всех моих объектов, что кажется неправильным.Можете ли вы разрешить мне, если приведенное ниже правильно с тем, как рассчитывается время преобразования?
ProcessTimer timer = new ProcessTimer();
List<VersionedRawDeal> versionedRawDeals = compressedVersionedRawDeals
.parallelStream()
.map(vrd -> getVersionedRawDealNew(vrd, timer))
.collect(Collectors.toList());
LOGGER.info("Time taken to process zipping : " + timer.getZipTime());
LOGGER.info("Time taken to process transformation :" + timer.getTransformTime());
// getVersonedRawDealNew метод
private VersionedRawDeal getVersionedRawDealNew(CompressedVersionedRawDeal compressedVerDeal, ProcessTimer timer){
CompressedRawDeal compressedDeal = compressedVerDeal.rawDeal();
DealVersion dealVersion = compressedVerDeal.dealVersion();
long zipStartTime = System.currentTimeMillis();
final String dealXml = unzip(dealVersion, compressedDeal.getDealXmlBytes());
long zipTime = System.currentTimeMillis() - zipStartTime;
timer.addZipTime(zipTime);
long transformStartTime = System.currentTimeMillis();
final RawDeal rawDeal = RawDealTransformers.getRawDealTransformerFor(compressedDeal.getSourceSystem())
.transformDeal(compressedDeal.getSourceEvent(), dealXml);
long transformTime = System.currentTimeMillis() - transformStartTime;
timer.addTransformTime(transformTime);
return ImmutableVersionedRawDeal.builder().dealVersion(dealVersion).rawDeal(rawDeal).build();
}
// Таймер процесса
public class ProcessTimer {
private AtomicLong zipTime;
private AtomicLong transformTime;
public ProcessTimer(){
this.zipTime = new AtomicLong();
this.transformTime = new AtomicLong();
}
public void addZipTime(long time){
this.zipTime.addAndGet(time);
}
public void addTransformTime(long time){
this.transformTime.addAndGet(time);
}
public long getZipTime(){
return zipTime.get();
}
public long getTransformTime(){
return transformTime.get();
}
}
Вывод
Я не получаю правильное вычисление времени, так как у меня есть таймер, который оборачивает вышеуказанный вызов, то есть в родительском методе, и время, необходимое для запуска всего процессаменьше моего времени трансформации.Мой таймер для родительского метода, который включает в себя время распаковки и преобразования, должен быть больше, чем мое время преобразования, а это не так.