1

ビューモデル全体をIsolatedStorage設定に保存しようとしています。他の多くのVMが含まれているため、非常に大きくなります。

値を読み取ろうとすると、「IsolatedStorageFileStreamで許可されていない操作」エラーがスローされます。私はファイルを使用しておらず、IsolatedStorageSettingsクラスを使用しているため、これは厄介な問題のようです。

ローカルアプリのデータディレクトリの下にある__LocalSettingsファイルをチェックアウトしましたが、16kで切り捨てられているようです(XML要素名の途中)。16kの制限があると思われるため、次回のロード時に、IsolatedStorageクラスはそれを無効なファイルと見なし、フィットをスローします(その後、空のファイルにブランクで戻します)。

IsolateStorageSettingsを使用するときに、すべての設定に16kのサイズ制限があるかどうかを確認したいのですが。

それを回避するいくつかの方法は、設定を使用する代わりにファイルとしてシリアル化し、再水和するか、このアプローチをまったく使用しないことです(より少ない情報を保存します)。誰かがより良いアイデアを持っているなら私に知らせてください?

4

2 に答える 2

2

IsolatedStorageFile.IncreaseQuotaToあなたの友だちです。

また、IsolatedStorageFileクラスのさまざまなメソッドを確認してください。

ここの例(「クォータを変更する方法のサンプル?」セクションを参照)およびここを参照してください。

アップデート

一方、アドレスを設定自体に埋め込むのではなく、外部ファイルに設定して設定ファイルのサイズを大きくしてみてください。たとえば、大きなxmlファイルがある場合は、設定をそのアドレスとハンドルに設定するだけです。設定ファイルのイベント(のサブクラスだと思いますApplicationSettingsBase)。

于 2010-11-14T03:21:41.993 に答える
1

さて、さらに多くの調査と髪の毛を引っ張った後、16kの制限は赤ニシンのようです。関連性があるかもしれませんが、実際の問題はシリアル化の問題です。

複合型のIsolatedStorageSettingsへのシリアル化に関して2つの問題があるようです。1つ目は、上記の1つで、XML要素の途中で_LocalSettingsクラスが16kで切り捨てられます。これにより、「IsolatedStorageFileStreamでの操作は許可されていません」という例外が発生します。2つ目は、より小さな複合型です-_LocalSettingsの内容を調べた後、書き込まれているように見えますが、次にアプリをロードするときに、最初のSettings.Saveは既存のすべての設定をワイプします(つまり、既存の設定はロードされません)それらを保存します)。これにより、_LocalSettingsが再び空白にリセットされます(つまり、すべての設定が保持されません)。

問題は、私の基本タイプの1つ(ちなみにMVVM Light ViewModelBase-これについて詳しくはこちらをご覧ください)にパブリックパラメーターレスコンストラクターがないため、シリアル化できないことでした(これに関する警告はなく、上記の奇妙な動作を示しただけです) 。

これを行うには、プログラムを終了する必要があります-このような書き込みの後に設定を読み取ると、正常に機能します-完全に終了した後、Silverlightは舞台裏でより多くのことを行っていると思います。誰かがこれを確認できれば??

基本クラスをシリアライズ可能にするとすぐに、それは再び機能しました。

于 2010-11-14T20:36:28.853 に答える