## 概要 `AppUtils.ahk`では設定ファイルを読み込む関数が存在する。 ```autohotkey ;【概要】設定ファイルから値を取得します ;【引数】section: 設定ファイルのセクション名 ; key: 設定ファイルのキー名 ;【戻値】設定値 ;【備考】設定値はSettings.iniの設定値によって取得元を変更します getSettingsValue(section, key) { IniRead setting, %A_ScriptDir%\Settings.ini, FILE, name IniRead value, %A_ScriptDir%\settings\%setting%.ini, %section%, %key% return value } ``` この関数は非常に呼び出される回数が多いため、FileIOに無駄な負荷をかける。実際には[[OS]]が2度目以降はメモリやストレージなどの内側にキャッシュしていると思うので実害には至らないかもしれない... が実装として望ましくはない。 一度アクセスされた場合はインメモリに格納して取り出せるようにする。 ## 方針 グローバル変数 `settingsCache` を定義する。 ```autohotkey global settingsCache := {} ;【概要】設定ファイルから値を取得します ; 一度取得した値はキャッシュされます (キャッシュクリアしたい場合はreloadが必要) ;【引数】section: 設定ファイルのセクション名 ; key: 設定ファイルのキー名 ;【戻値】設定値 ;【備考】設定値はSettings.iniの設定値によって取得元を変更します getSettingsValue(section, key) { global settingsCache cacheKey := section . "|" . key if settingsCache.HasKey(cacheKey) { return settingsCache[cacheKey] } IniRead setting, %A_ScriptDir%\Settings.ini, FILE, name IniRead value, %A_ScriptDir%\settings\%setting%.ini, %section%, %key% settingsCache[cacheKey] := value return value } ```