第13回 プログラム性能問題

photo-1473259990169-f6e6a8477bb7

プログラムパフォーマンスの話

今回はプログラムのパフォーマンスに関しての話を紹介したいと思います。ここ最近、プログラムの処理速度が遅いからどうにかしてほしいという依頼があります。製品の仕様で最初だけ遅い、処理しているサーバーリソースが足りず遅い、プログラムが遅い等ありましたがここではプログラムに関して紹介します。大量データの処理等ありがちなものは結局のところ工夫していくしかないので今回はありがちな話題で。

1.ファイル入出力に関して

基本的に大量データの処理や外部との通信システム等のプログラム以外で処理が遅いとなるとファイル入出力だと思います。ファイル入出力は巨大データでも、バッファ処理を行うため比較的高速ですが、使い方を間違えるとかなりパフォーマンスに影響が出ます。

例えば以下のようなファイルを作成する場合を考えて見ます。

dn: cn=tanat,ou=tecsup,dc=tailwind,dc=co,dc=jp
changetype: modify
replace: description
description: DB admin user

replace: enumber
enumber: 182

dn: cn=nagat,ou=tecsup,dc=tailwind,dc=co,dc=jp
以下省略

実際にあったのですが、ファイル入力に対し一行一行ファイルに書き出しているプログラムがありました。こんな感じのプログラムをループしてる感じだったと思います。(間に色々処理は挟みますが)

#入力データに対して特定の形式でデータを出力する(プログラムは所々省略)
Get-Content $IN_FILE | Foreach-Object{
"dn: cn=" + $CN + ",ou=" + $OU + "dc=tailwind,dc=co,dc=jp" | Out-File $LDIF_FILE -encoding Default -append
"changetype: modify" | Out-File $LDIF_FILE -encoding Default -append
"replace:" + "description" | Out-File $LDIF_FILE -encoding Default -append
"description: DB admin user" | Out-File $LDIF_FILE -encoding Default -append
"-" | Out-File $LDIF_FILE -encoding Default -append
#以下省略


}

これだけの書き込みを大量な入力データに対して頻繁に行うと問題になってきます。配列を用意して変数に格納してから出力するほうが良いでしょう。

$LDIF_BUF = @(1..$DATA_LENGTH)
Get-Content $IN_FILE | Foreach-Object{
$CNT++
$LDIF_BUF[$CNT] = "dn: cn=" + $CN + ",ou=" + $OU + "dc=tailwind,dc=co,dc=jp`n"
$LDIF_BUF[$CNT] += "changetype: modify`n"
$LDIF_BUF[$CNT] = "replace:" + "description`n"
$LDIF_BUF[$CNT] += "-`n"
#以下省略


}
$LDIF_BUF | Out-File $LDIF_FILE -encoding Default -append

自分の経験としてはexcelマクロを作っていたときに同じようなことがありました。すべてのプログラミング環境に対して共通でいえることだと思います。実際、今回のような内容は私の知る限り多くの入門書には書かれていないため、初心者が陥りがちな問題だと思い取り上げました。当時の担当者と話したところ、kshellからpowershellへ移植の際、ロジックをそのまま書き写したことが原因とのことでした。

取得情報

ISO-27001

IS 578154 / ISO 27001

ISO認証取得

  • 立川本社
  • 鳥取支社
  • TWS総合研究所

認証範囲:

  • コンピュータソフトウェア受託開発
  • システムエンジニアリングサービス
  • 情報システムの運用・保守
  • パッケージソフトウェアの開発・保守
  • コンサルティング事業、トレーニング事業及び情報セキュリティ事業

ISO-9001

FS591336 / ISO 9001

ISO認証取得

  • 立川本社
  • 鳥取支社
  • TWS総合研究所

認証範囲:

本社及び鳥取支店にて行う以下の業務

  • コンピュータソフトウェア受託開発
  • 情報システムの運用・保守
  • パッケージソフトウェアの開発・保守
  • TWS総合研究所で行うコンサルティング事業、トレーニング事業及び情報セキュリティ事業

ISO-9001

EMS602917 / ISO14001

ISO認証取得

  • 立川本社
  • 鳥取支社
  • TWS総合研究所

認証範囲:

  • コンピュータソフトウェア受託開発
  • システムエンジニアリングサービス
  • 情報システムの運用・保守
  • パッケージソフトウェアの開発・保守
  • コンサルティング事業、トレーニング事業及び情報セキュリティ事業

ISO45001

OHS 692647 / ISO45001

ISO認証取得

  • 立川本社
  • 鳥取支社
  • TWS総合研究所

認証範囲:

  • コンピュータソフトウェア受託開発
  • システムエンジニアリングサービス
  • 情報システムの運用・保守
  • TWS総合研究所
    コンサルティング事業、トレーニング事業及び情報セキュリティ事業

プライバシーマーク

当社は、個人情報の適切な取り扱いを行う事業所にのみ許可される「プライバシーマーク」の付与認定を受けています。

セキュリティ対策自己宣言

株式会社テイルウィンドシステムは社員が働きやすい環境作りに取り組み、平成29年度の東京都ライフ・ワーク・バランス企業として認定を受けました。

テイルウィンドシステムグループ方針

プライバシーポリシー