Shimadaさんからの報告で、AutoCADのEntityがTransaction中に解放されず、メモリ馬鹿食いしてるとのこと。調査して見たことをまとめておきます。
なお、完全に調べたわけではなく動きから把握したものなので、要調査です。
- AutoCADのEntityはGetObject()等で生成される。
- 同一ObjectIdのEntityでも何度も生成される。
(単なるラッパーらしい。) - TransactionをCommit/Abortすると解放される。
- Disposeすることにより解放できる。
(C++ではClose()があるが、C#側では非推奨メソッド) - DisposeしたEntityにアクセスすると落ちる。
大きいものになるとKb単位のものがあり、大きな図面に対して処理を行うと数百MB単位で無駄が発生します。とは言え、取得メソッドと利用メソッドが離れているケースも多く、安易にDisposeをするとキャッシュを破壊することもあります。共有Entityなのか一時Entityなのか上手く判断できればいいんですけどね。。。