所以我最终获得了listview内容以序列化并写入文件,因此我可以在不同的会话中恢复我的应用程序状态。现在我想知道是否有一种方法可以逐步序列化并保存我的数据。目前,我在我的主页的SaveState方法中调用此方法:
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 :(得分:0)
这取决于您何时定义何时将数据保存到硬盘驱动器。也许你想在添加或删除新的集合项时保存新的集合状态?或者当项目的内容发生变化时。
将所有内容及时保存到硬盘驱动器的主要问题是,这可能是狗狗慢。如果您使用的是async
编程模型,那么直接就不会有问题,因为您的应用程序不会挂起,因为一切都是异步的。
我认为保存集合说每分钟以及用户关闭应用程序时可能更好。这只有在你处理大量数据时才有效,因为你只有大约3秒的时间来执行所有的IO工作。
如您所见,没有完美的解决方案。这实际上取决于您的要求和数据的大小。没有进一步的信息,我可以肯定地告诉你。