リファクタリング プログラミング Java

elseを使わないことでパフォーマンスが下がる場合の対処法

投稿日:

 

状況

前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような
ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は
パフォーマンスが下がる。

 

対処法

メソッドを切り出し、早期リターンとする。

 

10億回のfor文でパフォーマンス評価

else有り、else無しで評価してみた。
(測定単位:ミリ秒)

else 有り

if文条件に当てはまれば、その時点で判定は終了するため、
より最初の方(上記の場合は、”man”)であるほど、判定は速く終了する。

<結果>
man :344
woman :343
other :2250
(未設定):1953

else 無し

全てのif文を判定するため、必ず一定の処理時間がかかる。

<結果>
man :1938
woman :2219
other :2212
(未設定):1898

結果(else無しは一定して遅い)

man、womanはelse有りの方が速い。
理由は、if文条件に合致したあとの後続処理(otheのif文等)は行われないため。
else無しの場合は、すべてのif文を実行するので処理が遅くなる。

上記の結果から、else有りと同じロジックに修正することで改善を試みる。
方法として、else無しをメソッドに切出して早期リターンとする。

 

パフォーマンス改善

else 無し AND メソッド切り出しして早期リターン

if文条件に当てはまれば判定結果をリターンするようにしたため、
後続のif文判定が行われない。

<結果>
man :321
woman :320
other :2199
(未設定):1863

結果(最速になった)

単位(ミリ秒)man(男性)woman(女性)other(その他)""(未設定)
else有り34434322501953
else無し1938221922121898
else無し
(早期リターン)
32132021991863

全3パターンで最速になりました。
else有りよりもわずかに早くなっているのは、「else」自体の処理が無いためと推察しています。

 

まとめ

・else有りだと、判定条件の順番によっては速く処理される。
・else無しだと、すべての判定を行うため、一律に処理時間がかかる。
・メソッドに切り出して早期リターンとすると、else有りと同等の処理速度をelse無しで実現できる。

 

コード全体

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

【Spring】JSの変更を反映させる方法

Spring Bootのおいて、JavaScriptの変更を反映させる方法です。   設定 application.properties application.propertiesに、以下 …

Java Silver SE11に誰でも合格できる方法

※お断り とても基本的かつ地道な方法です。 なので、魔法や銀の弾丸を求めている方はそっとページを閉じてください。 地道にこつこつと努力できる方のみ読み進めて下さい。 対象 ・Java Silver S …

no image

GitでIndexが壊れたときの直し方

これは自分の環境用の備忘録です。 (状況) Virtual BOX内のGit環境において、INDEXが0KBになっている。(INDEXが壊れている) (対処方法) リモート環境から新しくCloneして …

junit, テスト

【JUnit5】基本的なAssertionまとめ

概要 JUnit5における基本的なAssertionをまとめました。 検証方法 等価性 値が等価であるかを検証するメソッドです。 以下はorg.junit.jupiter.api.Assertions …

【Java】ArrayListの使い方まとめ

概要 ArrayListはOracleの公式ページでも明記しているクラスです。 Java SE 11 Programmer I (1Z0-815-JPN) 試験 インタフェースによる抽象化 インタフェ …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。