2

所以,我終於得到了我的列表視圖內容序列化和寫入文件,所以我可以在不同的會話恢復我的應用程序的狀態。現在我想知道是否有一種方法可以增量序列化並保存我的數據。目前,我把我的炫魅的即時存檔方法這個方法:的Windows Store應用增量系列化

private async void writeToFile() 
    { 
     var f = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("data.txt", CreationCollisionOption.ReplaceExisting); 
     using (var st = await f.OpenStreamForWriteAsync()) 
     { 
      var s = new DataContractSerializer(typeof(ObservableCollection<Item>), 
            new Type[] { typeof(Item) }); 
      s.WriteObject(st, convoStrings); 
     } 
    } 

我覺得這是比較理想的是,因爲它是產生寫出來的數據存儲,所以我沒有序列化我的整個列表中,但我不知道是否有可能增量序列化我的收藏,如果是這樣,我該怎麼做?

請注意,我的數據在生成後沒有更改,所以除了將新數據添加到當前序列化列表的末尾之外,我不必擔心其他任何操作。

回答

0

這取決於你定義時將數據保存到硬盤驅動器。也許你想在添加或刪除新的收藏品時保存新的收藏狀態?或者當一個項目的內容改變時。

大約只是在時間節省一切到硬盤驅動器的主要問題是,這是可能是狗緩慢。如果您使用的是async編程模型,那麼直接就不會有問題,因爲您的應用程序不會因爲是的而掛起,所有內容都是異步的。

我認爲這可能是一個更好的主意,保存收集說每分鐘和當用戶關閉應用程序。這隻會在你處理數據量很大的情況下工作,因爲你只有大約3秒的時間來執行所有的IO事務。

正如你所看到的,沒有完美的解決方案。這實際上取決於您的要求和數據的大小。沒有進一步的信息,我可以肯定地告訴你。

+1

我目前正在保存我的數據,當應用程序關閉時,但我同意做一個更好的方法是保存它作爲集合被修改,但我不知道如何增量保存此信息使用序列化。我不想在每次保存時重新編寫整個集合,因爲舊數據不會更改,只會添加集合,而不會進行其他修改。所以我想能夠「追加」到我目前的序列化數據。 – Nelz11

+0

附加數據很容易,但如果文件中間的數據發生變化,該怎麼辦?您必須讀取整個文件,找到更改的數據所在的位置並覆蓋該字節。如果你以前的數據少於新的數據?你將不得不重寫所有的字節等後,我不知道是否有什麼內置的做... – GameScripting

+0

我的數據不會改變,只有新的數據被添加。所以,當添加新數據時,我想要使用序列化的字符串並將其更新爲包含此新數據... – Nelz11