Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows应用商店应用程序增量序列化_C#_Serialization_Windows 8_Windows Runtime_Windows Store Apps - Fatal编程技术网

C# Windows应用商店应用程序增量序列化

C# Windows应用商店应用程序增量序列化,c#,serialization,windows-8,windows-runtime,windows-store-apps,C#,Serialization,Windows 8,Windows Runtime,Windows Store Apps,因此,我终于让我的listview内容序列化并写入到一个文件中,这样我就可以在不同的会话中恢复我的应用程序状态。现在我想知道是否有一种方法可以增量序列化和保存数据。目前,我在主页的SaveState方法中调用此方法: private async void writeToFile() { var f = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("data.tx

因此,我终于让我的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);
        }
    }
private async void writeToFile()
{
var f=wait Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(“data.txt”,CreationCollisionOption.ReplaceExisting);
使用(var st=wait f.OpenStreamForWriteAsync())
{
var s=新的DataContractSerializer(typeof(ObservableCollection),
新类型[]{typeof(Item)};
s、 WriteObject(st,字符串);
}
}
我认为更理想的做法是在生成数据时将其写入存储器,这样我就不必在很短的挂起时间内序列化整个列表,但我不知道是否可以增量序列化我的集合,如果可以,我将如何做


请注意,我的数据在生成后不会更改,因此除了在当前序列化列表的末尾添加新数据之外,我不必担心任何事情。

将数据保存到硬盘驱动器的时间取决于您的定义。在添加或删除新集合项目时,您可能希望保存新集合状态?或者当项目的内容更改时

将所有东西及时保存到硬盘的主要问题是,速度可能太慢。如果您使用的是
async
编程模型,那么它不会直接成为问题,因为您的应用程序不会挂起,因为是的,一切都是异步的

我认为保存收藏可能是一个更好的主意,比如每分钟以及当用户关闭应用程序时。这只有在处理大量数据时才有效,因为您只有大约3秒钟的时间来执行所有IO操作


正如你所看到的,没有完美的解决方案。这实际上取决于您的需求和数据的大小。没有进一步的信息,我只能肯定地告诉你。

我目前正在关闭应用程序时保存数据,但我同意更好的方法是在集合修改时保存数据,但我不确定如何使用序列化增量保存此信息。我不想每次保存时都重新写入整个集合,因为旧数据不会更改,集合只会添加到中,不会进行其他修改。因此,我希望能够“附加”到当前的序列化数据。附加数据很容易,但如果文件“中间”的数据发生更改怎么办?您必须读取整个文件,找到更改数据所在的位置,并仅覆盖该字节。如果你以前的数据比新的少?你必须重写后面的所有字节,等等。我不确定是否有内置的东西可以做到这一点……我的数据没有改变,只添加了新的数据。因此,当添加新数据时,我希望获取序列化字符串并将其更新为包含此新数据。。。