これは検証中であることを先にお断りしておきます。




先日、15,000件の処理が60秒から2~3秒に短縮した話を書きましたが、なぜか20秒近くかかるようになってしまいました。




処理速度を改善すべく、「動的にメモリを取れないか」と調べると


 Application.MemoryTotal

 Application.MemoryUsed

 Application.MemoryFree

というプロパティは見つけました。が、動的にメモリの確保はできないようだ。




また、調べていると


・Application.MemoryTotal はブックをセーブすると変化する


・Application.MemoryFree は常に一定の値であるようだ


という話を見つけ、試してみたところ、確かにそのようだ。でも実行中にブックの保存なんかしたくないなあ、などと思い悩んでおりました。




そんなこんなで、15,000件の処理を再び実行してみると、今度はまた2~3秒で完了した。




違いはなんだろう?と考えると・・、遅くなったときはブックサイズが 300kb 程度であったが、うっかりンポラリデータを保存していたので 14,500kb くらいになっていました。


もしかするとブックサイズが大きいとメモリが大きく確保されるので高速になる、ということはありうるかもしれません。




私の方でももう少し検証してみます(あまり時間がありませんのでとりあえず簡単に)が、もしご覧の方で実験してみられた方がいらっしゃいましたら、結果をコメント頂けると有難いです。




>> 検証中


仮説は今のところ正しそう。だが、「途中で別のブックをセーブしてもApplication.MemoryTotalは変化するみたい。」です。