バタイユゲーム支援ツール強化版の時間計測を行っていたら、
処理時間が徐々に遅くなることが分かった。
後のために調べた内容と暫定対策をメモしておく。
1.背景
バタイユゲーム支援ツール強化版の砲撃処理を計測したら、
VBA処理が下図のように徐々に遅くなることが分かった。
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 | 7回目 | 8回目 | 9回目 | 10回目 | |
VBA処理時間(sec) | 5.04 | 5.25 | 5.53 | 5.56 | 5.85 | 5.93 | 6.21 | 6.47 | 6.7 | 6.73 |
Python処理時間(sec) | 2.37 | 2.89 | 1.97 | 1.53 | 2.64 | 2.15 | 2.18 | 2.24 | 3.5 | 2.36 |
2.原因
不明である。
処理開始前と10回目の処理終了後のEXCELのメモリ容量を調べたら、
下図のように大きくなっているので、原因の1つと考えられる。
・処理開始前は49.4MB
・10回目の処理終了後は55.3MBと約6MB大きくなる。
なお、強化版でない支援ツールで手動で砲撃を10回行うと(強化版の1回に相当)、
下図のようにメモリ容量が大きくなる。従って、VBAの問題と思われる。
3.暫定対策
今の所効果があるのは、一旦EXCELを終了させる事である。
そうするとメモリ容量と処理時間がリセットされる。
下図の5回目と9回目の前に一旦EXCELを終了させた。
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 | 7回目 | 8回目 | 9回目 | 10回目 | |
VBA処理時間(sec) | 5.26 | 5.31 | 5.53 | 5.77 | 5.01 | 5.34 | 5.54 | 5.75 | 5.14 | 5.38 |
Python処理時間(sec) | 2.92 | 2.02 | 2.56 | 3.67 | 2.89 | 2.01 | 1.55 | 2.61 | 2.86 | 2.47 |
#一旦EXCELを終了させ、1秒後に再起動させるpythonの命令
wb.save()
app = xw.apps.active
app.kill()
time.sleep(1)
wb = xw.Book(path)
次回へつづく
<個人的な感想>
データ量が増えたわけでもないのに、メモリ容量が大きくなる理由が分からない。
VBAのメモリ解放が上手く機能していないように思える。
暫定対策のpythonの命令で1秒のスリープは無くてもリセットされるが、
念の為に入れておく。(気分的なもの)