私のプログラムでは、カタログをロードできます:ICatalog
ここのカタログには、参照カウントされた構造体が多数含まれています (IItems、IElements、IRules などの Icollections)。
別のカタログに変更したい場合、新しいカタログをロードしますが、以前の ICatalog インスタンスの自動リリースには時間がかかり、アプリケーションが 2 秒以上フリーズします。
私の質問は:
古い (そしてもう使用されていない) ICatalog インスタンスのリリースを別のスレッドに延期したいと考えています。
まだテストしていませんが、新しいスレッドを作成するつもりです:
ErazerThread.OldCatalog := Catalog; // old catalog refcount jumps to 2
Catalog := LoadNewCatalog(...); // old catalog refcount =1
ErazerThread.Execute; //just set OldCatalog to nil.
このようにして、リリースがスレッドで発生し、アプリケーションがフリーズしないことを期待しています。
それは安全ですか(そして良い習慣ですか)?
同様の方法ですでにリリースを実行している既存のコードの例はありますか?