在我的程序中,我可以加载一个目录:ICatalog。
这个目录包含了许多引用计数结构(IItems、IElements、IRules等的集合)。
当我想要切换到另一个目录时, 我会加载一个新的目录, 但是自动释放前一个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.
这样,我希望释放操作发生在线程中,这样我的应用程序就不会再被冻结了。
这种做法是否安全(和最佳实践)?您有类似方法的现有代码示例吗?