2011-06-19 5 views
4

ユーザー設定を使用する.Netアプリケーションがあります。これらの設定を保存する最も良い時期は何ですか?UserSettingsを保存するベストタイム

は明確、私は保存するには、この機能を呼んでいることには:

Storage.Properties.Settings.Default.Save() 

まず、私はかかわらず、すべての変更にそれらを保存するには、それは遅いですし、必要ではないようです。ドキュメンテーションでは、フォームが閉じているときに、アプリケーションが終了するとき、その例では保存する必要があるだけであることが示唆されています。

しかし、アプリケーションのインスタンスが2つ実行されている場合はどうなりますか? Application_Exitイベントまで待つと、インスタンス間で設定が保持されないようです。アプリケーションの新しいインスタンスが古いユーザー設定を読み込み、エラーを引き起こします。

だから、これにはどのようなベストプラクティスがありますか?

+0

これはVisual Studioの拡張機能ですか?または、勝利アプリですか? –

+0

これは優勝アプリです。 C#、.Net 4、WPF 4.質問に誤ってタグを付けると、申し訳ありませんが、私に知らせてください。 – Michael

+0

ok、私はFTFY;) –

答えて

4

答えはアプリケーションによって異なるため、ベストプラクティスはありません。一部のアプリでは、複数のインスタンスを許可することさえできません。

は、しかし、ほとんどのアプリケーションは、これらのもののいずれかを実行する傾向がある:彼らは多くの場合、設定を変更するので、一度に変更のセット全体を保存しない

  • (例えば、設定ダイアログで変更を適用する場合)。
  • バックグラウンドで頻繁に変更されるため、特定の間隔で保存するタイマーイベントを設定します。
  • これらは頻繁に変更されますが、明示的には、ユーザーがクリックするための「変更を保存」ボタンがあります。

終了時に保存する際の問題は、処理されない例外が発生するバグがあると、変更が失われる可能性があることです。あなたのアプリがバックグラウンドで実行されることになっている場合は、特に開発/テスト中であることが考えられるより頻繁に起こります。

私は数年前に書いたおもちゃシステムトレイスタイルのアプリで「退出時に保存」戦略を実行し、それを後悔しました。明示的なセーブおよび/またはインターバルセーブははるかに良い選択肢でした。

+0

私は同意します。私のアプリは複数のインスタンスをサポートする必要があります。私は一般にフォームが閉じるときに保存します。 WPFとバインディングを使用すると、ユーザーがインターフェイスとやりとりするたびにユーザー設定が保存されます。しかし、私が心配している1つのケースは、ブックマークを持つXMLデータベースがあることです。ブックマークはそれぞれ固有のIDを持っています。だから、私は最後の一意のIDを保存するユーザー設定を使用します。したがって、ユーザーIDを変更するたびに保存すると、大きなセットをインポートするのが遅くなります。アプリケーションの終了時に保存すると、複数のインスタンスに問題が発生する可能性があります。インポート後に保存しても、コードにはまだ問題があります。 – Michael

+0

@Michael:複数の戦略を採用する必要があるように思います。常にGUIに即座に保存し、1回のアイテムではなく、一括して変更のグループ全体を保存する「バッチインポート」モードをサポートします。 –

+1

すてきな答え。私はそれに私の2セントを追加したいと思います。 個人的には、ユーザーが「変更を保存」ボタンをクリックしない限り変更を保存しないでしょうが、アプリケーションの実行中に設定をメモリに保持します。 したがって、複数のインスタンスが実行されている場合でも、ユーザーが具体的にそれを要求しない限り、メイン設定は変更されません。 しかし、一時的に変更することができます。 – Dementic

関連する問題