C#自动保存清理;最佳实践?

C#自动保存清理;最佳实践?,c#,dispose,autosave,finalize,C#,Dispose,Autosave,Finalize,我有一个表示文档(GHU文档)的类。GH_文档上有一个自动保存方法,在每次潜在危险操作之前调用该方法。此方法在原始文件旁边创建(或覆盖)自动保存文件 GHU文档还包含一个名为DestroyAutoSaveFiles()的方法,该方法从磁盘中删除AutoSave函数创建的所有文件。当应用程序关闭时,以及当文档卸载时,我对文档调用此方法。然而,我似乎错过了一些案例,因为在一些成功关闭之后,自动保存文件仍然存在 所以这让我思考。处理这种情况的最好方法是什么?我是否应该追踪所有可能的文档消失方式,并在任

我有一个表示文档(GHU文档)的类。GH_文档上有一个自动保存方法,在每次潜在危险操作之前调用该方法。此方法在原始文件旁边创建(或覆盖)自动保存文件

GHU文档还包含一个名为DestroyAutoSaveFiles()的方法,该方法从磁盘中删除AutoSave函数创建的所有文件。当应用程序关闭时,以及当文档卸载时,我对文档调用此方法。然而,我似乎错过了一些案例,因为在一些成功关闭之后,自动保存文件仍然存在

所以这让我思考。处理这种情况的最好方法是什么?我是否应该追踪所有可能的文档消失方式,并在任何地方添加自动保存清理逻辑?还是应该在GH_Document.Dispose()中实现IDisposable并执行清理?还是应该在GH_Document.Finalize()中执行此操作

我唯一希望自动保存文件保留在磁盘上的时间是在应用程序崩溃时。是否保证在发生崩溃时不调用Dispose和Finalize

是否保证在发生崩溃时不调用Dispose和Finalize

一般来说,不会,但这取决于应用程序崩溃的方式。在C#中,它通常是未捕获异常传播到顶层的结果。在这种情况下,任何finally子句都将在堆栈上执行,这包括使用语句进行的Dispose调用

如果应用程序突然终止(例如通过在任务管理器中终止它),将不会调用finally子句,但您不应该依赖此行为


一个简单的解决方案是将自动保存文件放入一个具有特殊命名约定的隐藏目录中,并在成功关闭时删除该目录中的所有自动保存文件。

谢谢,这几乎排除了最终确定方法。在非托管环境下,我的应用程序作为托管插件运行,大多数崩溃是由于未处理的C++异常、内存溢出或托管异常导致的。我无法销毁所有autosave文件,因为人们可能正在运行我的应用程序的多个实例,并且一个实例不应该从另一个实例删除autosave文件。此外,人们将无法找到此“特殊”文件夹,这将给支持带来额外负担。我想我得把清理工作弄得水泄不通。