0

ドキュメントを表すクラス(GH_Document)があります。GH_Documentには、潜在的に危険なすべての操作の前に呼び出されるAutoSaveメソッドがあります。このメソッドは、元のファイルの横にAutoSaveファイルを作成(または上書き)します。

GH_Documentには、AutoSave関数によって作成されたすべてのファイルをディスクから削除するDestroyAutoSaveFiles()というメソッドも含まれています。このメソッドは、アプリが終了したとき、およびドキュメントがアンロードされたときにドキュメントに対して呼び出します。ただし、シャットダウンが成功した後もAutoSaveファイルがまだ存在しているため、いくつかのケースを見逃したようです。

だから、これは私に考えさせました。このような状況を処理するための最良の方法は何ですか?ドキュメントが消える可能性のあるすべての方法を追跡し、自動保存クリーンアップロジックをどこにでも追加する必要がありますか?または、IDisposableを実装し、GH_Document.Dispose()でクリーンアップを実行する必要がありますか?または、GH_Document.Finalize()でこれを行う必要がありますか?

自動保存ファイルをディスクに残したいのは、アプリケーションがクラッシュした場合だけです。クラッシュが発生した場合にDisposeとFinalizeが呼び出されないことが保証されていますか?

4

1 に答える 1

1

クラッシュが発生した場合にDisposeとFinalizeが呼び出されないことが保証されていますか?

一般に、いいえ。ただし、アプリケーションがどのようにクラッシュするかによって異なります。C#では、通常、キャッチされない例外がトップレベルまで伝播した結果になります。この場合、finally句はスタックの途中で実行されます。これには、usingステートメントからのDispose呼び出しが含まれます。

アプリケーションが突然終了した場合(たとえば、タスクマネージャーでアプリケーションを強制終了した場合)、finally句は呼び出されませんが、この動作に依存しないでください。

簡単な解決策は、特別な命名規則を使用して自動保存ファイルを隠しディレクトリに配置し、シャットダウンが成功したときにそのディレクトリ内のすべての自動保存ファイルを削除することです。

于 2009-11-23T13:25:06.300 に答える