2010-11-14 44 views
1

我試圖將整個viewmodel保存到IsolatedStorage設置中。它很大,因爲它包含許多其他虛擬機。是否有Silverlight LocalSettings(IsolatedStorageSettings)的大小限制爲16k

當我嘗試讀取值時,會拋出「IsolatedStorageFileStream不允許操作」錯誤。這看起來像一個紅鯡魚,因爲我沒有使用文件,我正在使用IsolatedStorageSettings類。

我檢出了我的本地應用程序數據目錄下的__LocalSettings文件,它似乎在16k(通過XML元素名稱的一半)被截斷。我懷疑它有16k的限制,因此在下一次加載時,IsolatedStorage類會將它視爲無效文件並拋出一個適配(然後將它填充到空文件)。

我只想確認在使用IsolatedStorageSettings時所有設置的大小限制是否爲16k?

其中一些方法是將其序列化爲文件並對其進行補充而不是使用設置,或者根本不使用此方法(存儲較少信息)。在任何人有更好的主意,請讓我知道?

+0

請注意,Debug.WriteLine是有限的,因此截斷可能來自於此。通過NewLine分成一個數組,並分別寫入數據。 – 2011-12-05 13:21:21

回答

1

好吧,經過很多調查和發拉16k限制似乎是一個紅鯡魚。這可能是相關的,但實際問題是序列化問題。

這裏似乎有兩個關於將複雜類型序列化爲IsolatedStorageSettings的問題。第一個是上面提到的一個,其中_LocalSettings類在16k通過XML元素中途截斷。這會導致「IsolatedStorageFileStream不允許操作」異常。第二個是較小的複雜類型 - 在檢查_LocalSettings的內容後,它似乎寫入它,但接着在下一次加載應用程序時,第一個Settings.Save擦除所有現有設置(即它不加載現有的設置並保存它們)。這會使_LocalSettings重置爲空白(即,所有設置都不會被保留)。

的問題是,我的基本類型之一(捎帶着MVVM光ViewModelBase - read more about this here)不具有公共paramaterless構造,因此不序列化(有沒有這方面的警告,它只是表現出上面的奇怪行爲) 。

您必須退出程序才能實現此目的 - 當您在這樣寫入後閱讀設置時,它可以正常工作 - 我懷疑在完全退出後Silverlight會在幕後執行更多操作。如果有人可以證實這一點??

只要我使基類可串行化,那麼它再次工作。

2

IsolatedStorageFile.IncreaseQuotaTo是你的朋友。

另請參閱IsolatedStorageFile類的各種方法。

見的例子here(見「樣品關於如何修改配額?」一節)和here

更新

在另一方面,也許試圖通過地址設置到外部文件,而不是在設置本身嵌入它們,例如增加了設置文件的大小,如果你有一個大的XML文件,只需將設置設置爲其地址並處理設置文件的事件(我認爲它是ApplicationSettingsBase的子類)。

+0

嗯 - 我不認爲這是問題。 _LocalSettings文件打到16k,而默認情況下IS獲得1兆(我的課程可能是猜測100k,它只是文本信息)。我拋出了IsolatedStorageFile.AvailableFreeSpace並有1兆免費。我懷疑IsolatedStorageSettings在讀取/寫入文件到IS時的功能不同。我真的需要知道LocalSettings是否被限制爲16k,因爲這是我的截斷文件的大小。基本上,當我嘗試寫一個小設置的時候,它可以工作,但是當我嘗試並保存大設置時,它會在16k時崩潰。謝謝 – Rodney 2010-11-14 03:47:27

+0

我已經更新了我的答案。 – Shimmy 2010-11-14 05:25:48

相關問題