コンテンツへスキップ

AutoCADEntityの解放

Shimadaさんからの報告で、AutoCADのEntityがTransaction中に解放されず、メモリ馬鹿食いしてるとのこと。調査して見たことをまとめておきます。

なお、完全に調べたわけではなく動きから把握したものなので、要調査です。

  • AutoCADのEntityはGetObject()等で生成される。
  • 同一ObjectIdのEntityでも何度も生成される。 (単なるラッパーらしい)
  • TransactionをCommit/Abortすると解放される。
  • Disposeすることにより解放できる。 (C++ではClose()があるが、C#側では非推奨メソッド)
  • DisposeしたEntityにアクセスすると落ちる。

大きいものになるとKb単位のものがあり、大きな図面に対して処理を行うと数百MB単位でムダが発生します。とは言え、取得メソッドと利用メソッドが離れているケースも多く、安易にDisposeをするとキャッシュを破壊することもあります。共有Entityなのか一時Entityなのか上手く判断できればいいんですけどね。。。

© 2003 Kurusugawa Computer Inc.