2

私は C# で .XML ドキュメントを操作しています。このドキュメントからノードを選択し、ノードを追加し、ノードを削除しています。コード全体で何度も何度もノードを削除しています。

このドキュメントの XML 編集はすべて、他のクラスが呼び出すクラス内に含まれています。

Data Access クラスには、それを使用するクラスがドキュメントの編集を完了したかどうかを伝える方法がないため、保存するかどうか、またはいつ保存するかについてのロジックがありません。

ドキュメントを変更するたびに保存できましたが、パフォーマンスの問題が心配です。

または、それを使用する他のクラスによって保存されることを想定/希望することもできます(ドキュメントを保存するための1行のパブリックメソッドを作成したため、別のクラスが保存を要求できます)。

2 番目のオプションは、それが呼び出されて変更がコミットされないことを回避するために、何らかの方法でグローバルに適用する必要があると感じているため、私には関係があります。この時点まで、ロールバックが必要になるケースはありません。すべての変更は、コミットする必要がある変更です。

.Net (またはコーディング設計) には、このような状況でパフォーマンスと安全性のバランスをとる方法がありますか?

4

2 に答える 2

3

基本的にあなたの質問は私をすべて言っています:あなたはセーブする必要がありますが、セーブポイントに関する知識はあなたのクラスの外にあるので、あなたはいつかわからない.

私のお勧めは、呼び出しをラップするpublic void MyClass.SomeEditing(int foo)ことpublic void MyClass.SomeEditing(int foo, bool ShouldSave)ですtrue

このようにして、クラスの消費者は、すぐに保存するかどうかを決定できます。false彼が知っているかどうかを選択すると、直後の他の編集が保存を引き起こします。「古い」API を呼び出す既存のコードは、デフォルトの「すぐに保存」によって保護されます。

于 2012-06-26T22:29:42.017 に答える
3

いつでも変更を保存したい場合 (いつ保存するかわからない場合) は、 save コマンドをクラスのデストラクタに追加できます。これにより、変更が常に保存されることがわかります。

追加のヘルプが必要な場合や例が必要な場合は、コメントを残してください。それ以外の場合は、正しい回答を選択してください。

更新: 他のオブジェクト (FileStream など) が既に破棄された後に、クラス デストラクタが起動する可能性があることに気付きました。
デストラクタでこの条件をテストし、IDisposableインターフェイスを実装して使用することをお勧めします。その後、 Application.ExitイベントまたはApplication.ApplicationExitイベントのいずれかにサブスクライブし、そこで dispose を呼び出すことができます。
プログラムがクラッシュしたり、その他の予期しない終了が発生した場合に備えて、コードをデストラクタに保持してください (ただし、try ブロックにコードがあることを確認してください)。

于 2012-06-26T22:36:21.213 に答える