我想在应用程序运行时替换支持我的托管对象的文件。我的问题与这个问题类似,但我还有一点额外的挑战。我想在同一个地方替换文件,即完全相同的路径和文件名。
该问题的答案建议重建整个持久性堆栈。我同意这一点。但是,我对时机并不十分自信。作为一个额外的复杂因素,我可能有其他线程试图访问托管对象。不应该那样做,我知道。哎呀。我发现它太晚了,现在它在我的应用程序架构中已经根深蒂固,所以不建议改变它。我通常依靠锁定来保证它的安全,但在这种情况下它有点棘手。
所以,我觉得需要做这些事情,不一定要按这个顺序:
- 锁定旧的持久存储
- 将新文件复制到我用于持久存储的路径中
- 创建一个新的持久性堆栈
- 释放旧的持久存储和与之关联的任何托管对象
- 解锁旧的持久存储
有关执行这些操作的最安全顺序的任何想法,或者是否有任何不必要的想法(或需要额外的步骤)?仅供参考,我使用的是二进制存储类型,但我希望代码足够健壮,以便在我决定更改时它应该适用于任何存储类型。