在我的程序中,我可以加载目录:Icatalog
此处的目录包含很多引用结构(Icollections of IItems、IElements、IRules 等)
当我想更改到另一个目录时,我加载了一个新目录,但前一个 IDatalog 实例的自动释放需要时间,我的应用程序冻结了 2 秒或更长时间。
我的问题是:
我想将旧的(不再使用的)ICatalog 实例的发布推迟到另一个线程。
我还没有测试过,但我打算创建一个新线程:
ErazerThread.OldCatalog := Catalog; // old catalog refcount jumps to 2
Catalog := LoadNewCatalog(...); // old catalog refcount =1
ErazerThread.Execute; //just set OldCatalog to nil.
这样,我希望发布发生在线程中,并且我的应用程序不再冻结。
它安全(和良好的做法)吗?
您是否有已经使用类似方法执行发布的现有代码示例?