COMムズイ

VBでエクセルの中を読むツールを今作ってます。*1 エクセル開いて中身を拾うのは簡単だったが…
大量のエクセル*2を読み込ませると大変!
解放漏れ起こしてタスクマネージャ*3がすごいことになるし、
メモリが足りなくなって堕ちたりと…
得に解放漏れ*4がなかなか解決できなくて苦戦した。
参照を切ってガーコレ*5が起きれば万歳なのだがけれがうまくいかない…
Nothingいれたり、コム*6解放用のメソッド使ったりしたがどうもパッとせず…


今日やって感じたのが、

  • コムの参照取得
  • それを使ったなんらかの処理
  • コムの解放

は一つのメソッドにまとめた方がいいっぽい*7
コム取得用のメソッドとか解放用のメソッドとか使うと、
強制ガーコレ*8しても生きてたりするからだ。
ネットで調べてみたがガーコレも切ればいいわけではなく、
適用範囲外になるケースとかあるらしい*9


にしても納得いかねーな*10
メソッド外に出れば破棄されるわけだから消えてもらってもいいのだが、
実際にはタスマネに100数個のエクセルが残り、
エクセルファイルを開くとその100数個が一斉に開くという凄い事が起こる。
やっぱり解放漏れなのか…*11


う〜む。何故だ…
こうもネチネチ書いてたら電車が随分進んだ。*12
最寄駅までもうすぐだ。

*1:業務とは関係ない

*2:だいたい200個ぐらい

*3:以下、タスマネ

*4:プログラムが終わってもタスマネ上では生きている状態

*5:ガーベジコレクションに決まってる

*6:アルファベッドが面倒なのでカタカナで

*7:納得ひしていないが…

*8:システム・ジーシー・コレクト またまたアルファベッドめんどくさいので

*9:詳しくは忘れたが…

*10:まあ、なんとか動くレベルなんだが、メソッド使ってジェネレーターみたいなのができないのが…

*11:いやそうなんだが…ローカル変数しか使ってないのに起きてる事に納得いかない

*12:それだけモヤモヤしてる訳です