文字列を変換する系の処理は重い

最近は雨が多いため湿度が高く、さらに気温も上がってきているためなかなかに厳しい環境です。
無理して熱中症になっても大事なので、エアコンに頼ってでも環境を整えたいところですね。


さて、表題の件です。
現在携わっている業務で、協力会社に依頼して作成されたプログラムの動作確認というものが
あったのですが、特定の処理でものすごく処理が遅い、という事象が発生しました。

最初はPC上で動作確認をしており、その時は特に問題も出ていなかったのですが、
いよいよ組み込み先の基板上で動作させたところ、問題の事象が確認されたという形でした。

急ぎ処理を詳しく確認してみると、どうも特定のループ処理で引っ掛かっているようで、
その中で行われていたのが文字列⇒数値変換だったというわけです。

正確には、文字列⇒日時⇒数値という変換が行われていました。以下のような感じですね。

String dateTime = "2024-06-08T10:20:38Z"; // 日付文字列例
ZonedDateTime zonedDateTime;

try {
  zonedDateTime = ZonedDateTime.parse(dateTime);
} catch (DateTimeParseException e) {
  return null;
}

Long timeStamp = zonedDateTime.toEpochSecond();

この処理がループ1回中、6回ほど行われており、ループ回数はなんと15000回前後。
最近のPCの処理能力であればそこまで時間はかかりませんが、CPUパワーの低い基板上で
これは致命的でした…。

幸い、変換はループ外で行っておく手法で難を逃れることが出来ましたが、結構焦る事態でした。

今回は少々慌ただしく依頼をかけたこともあり、協力会社に動作確認用の基盤を渡せていなかったため
発生した問題とも言えます。

ただまあ、それを踏まえてもなかなかに酷い処理ではあったので、自分としても
PCのパワーに頼った処理にならないよう気を付けたいと思える出来事でした。
処理は早いに越したことはないですからね。

以上