SSブログ

システム起動の高速化検討のその後 [システムトレード]

先日のコラムで、システム起動を高速化するために、再計算を手動に設定してシステムを起動した後、システムのWorkbook_Openプロシージャで再計算を自動に設定すれば良いと述べましたが、この方法では起動に異常なほどの時間が掛かる現象を解決することはできませんでした。

その後、いろいろと試行錯誤しながら検討を続けたところ、この問題を解決する糸口を見つけることができました。
しかし、そのためには若干の副作用があることも分かり、どうしたものかと考えあぐねています。

そもそも、起動時の再計算に時間が掛かる現象は、システムにデータを追加するなどしてファイル容量が変化した時に起こります。
データ追加後、上書き保存してシステムを一旦閉じた後、それを再び起動すると、上記の問題が生じ易くなります。

その場合、それを再び上書き保存して閉じた後、再起動すると、今度はスムーズに起動します。そもそもこの問題は、起動後の最初に行なう再計算において生じ、それ以降の再計算では生じません。
どうやらエクセルでは、ブックを保存する際に、計算を行なうために必要なメモリ容量を割り出して、それを記録しているような感じがします。

ところが、ある程度以上のファイル容量になるとそれが上手くマッチングせず、初回の再計算の際にメモリ不足を起こしているように見えます。
その時点で、メモリが足りないことが分かりますから、エクセルはそこでメモリを再割り当てするのではないかと考えます。

もしもその予想通りだとしても、メモリの割り当て方法は分かりませんから、それだけではどうしてみることもできません。
しかし、システム起動後の最初の再計算の前に、エクセルが予測している再計算量よりも少ない計算量に抑えてやれば、ひょっとして再計算の速度が改善されるのではないかと考えました。

そこで、システムの計算方法を手動で起動した後、ある程度の量のセルを一旦削除してその状態で再計算を行い、その後セルを復元して計算方法を自動に設定すれば、再計算がスムーズに行くのではないかと思い、試してみました。

その結果は、ほぼ予想通りでした。従来は、けして少なくない確率でシステム起動時に再計算の停滞があった訳ですが、それが解消されました。
それ以外にも若干の改良を加え、システム更新に掛かる時間は、システム起動⇒データ更新⇒システム保存・クローズで、1システム当り10秒程度となりました。

これは、従来よりも速いと言うわけではありませんが、少なくとも、システム起動時の停滞が解消される分、トータルでは高速化が図れるのではないかと思います。
しかし、この方法には思いがけない副作用があることが、同時に分かりました。

従来であれば、起動時に再計算処理が停滞したシステムであっても、データを追加せずに保存後、再起動すれば、再計算処理の停滞は起こりませんでした。
このことが、今まで、この症状の再現性を低くしていた大きな原因でした。

しかし、今回考案した方法の場合、計算方法が手動の状態からシステムを起動すれば、起動時の再計算処理はスムーズに行なわれるのですが、計算方法が自動の状態からシステムを起動すると、必ず、起動時の再計算で停滞が生じます。

これは、システムを上書き保存しても、解消されません。システムを再起動しても、同じ症状が繰り返されます。
しかし、最初の再計算さえ完了すれば、その後はパラメータを変える等しても、処理(再計算)は瞬時に終わります。

すなわち、再計算の停滞を防ぐためには、システム起動前に必ず計算方法を手動に設定しておく必要があるわけです。
KFシステムコントローラ等のマクロからシステムを起動するだけなら、各マクロを改定すればいいのですが、エクセルのメニューから直接開く場合は、そうは行きません。

事前にエクセルの設定を変えておくか、計算方法を手動に設定するためのダミーブックを、システム起動の前に開くなどの処置が必要になります。
エクセルをシステム専用に使用しているのなら、初期状態を常に計算方法手動にしておけばいいのですが、他の用途にも使っている場合は、そうも行かないでしょう。

そんなこともあって、冒頭で述べましたように、どうしたものかと考えあぐねているわけです。時々生じるシステム起動時再計算の停滞を許容し、システム体系を現状通りとするか、あるいは、停滞を回避する代わりにシステム体系全体の見直しを行なうか、頭の痛いところです。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。