Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 在内存中没有两个副本的情况下反序列化BindingSource列表?_C#_Generics_Serialization_Bindingsource - Fatal编程技术网

C# 在内存中没有两个副本的情况下反序列化BindingSource列表?

C# 在内存中没有两个副本的情况下反序列化BindingSource列表?,c#,generics,serialization,bindingsource,C#,Generics,Serialization,Bindingsource,我的应用程序的“文档”实际上只是一个具有列表的BindingSource。由于无法直接序列化BindingSource,因此在需要保存时,我会序列化列表 当需要加载时,我希望直接反序列化到BindingSource中,但我不知道您能做什么(这个.List成员是只读的)。因此,我必须反序列化到一个临时列表中,然后将每个项添加到BindingSource的列表中 这意味着当我完成时,内存中有两个副本,其中一个将被清除,但如果文件变大,这将是一个问题 我是否应该采取更直接的方法,或者以某种方式直接反序

我的应用程序的“文档”实际上只是一个具有列表的BindingSource。由于无法直接序列化BindingSource,因此在需要保存时,我会序列化列表

当需要加载时,我希望直接反序列化到BindingSource中,但我不知道您能做什么(这个.List成员是只读的)。因此,我必须反序列化到一个临时列表中,然后将每个项添加到BindingSource的列表中

这意味着当我完成时,内存中有两个副本,其中一个将被清除,但如果文件变大,这将是一个问题

我是否应该采取更直接的方法,或者以某种方式直接反序列化到BindingSource持有的列表中


我没有序列化列表,而是尝试逐个序列化列表中的元素,但生成的磁盘文件要大得多。

如果大小足够大,以至于保存两次是一个问题,那么可能保存一次也是一个问题。然而如果您感兴趣,protobuf net有一个反序列化Items方法,该方法返回一个非缓冲(完全流式)IEnumerable,即无列表。所以你可以:

foreach(var item in {DeserializeItems})
    bindingSource.Add(item);
我还可以保证它在磁盘上会更小,处理速度也会更快

不过,我想知道,对于大型列表,“虚拟模式”是否是一个更好的选择。

当数据到达时,您可以使用它将数据从一个列表传输到另一个列表