C# 在内存中没有两个副本的情况下反序列化BindingSource列表?
我的应用程序的“文档”实际上只是一个具有列表的BindingSource。由于无法直接序列化BindingSource,因此在需要保存时,我会序列化列表 当需要加载时,我希望直接反序列化到BindingSource中,但我不知道您能做什么(这个.List成员是只读的)。因此,我必须反序列化到一个临时列表中,然后将每个项添加到BindingSource的列表中 这意味着当我完成时,内存中有两个副本,其中一个将被清除,但如果文件变大,这将是一个问题 我是否应该采取更直接的方法,或者以某种方式直接反序列化到BindingSource持有的列表中C# 在内存中没有两个副本的情况下反序列化BindingSource列表?,c#,generics,serialization,bindingsource,C#,Generics,Serialization,Bindingsource,我的应用程序的“文档”实际上只是一个具有列表的BindingSource。由于无法直接序列化BindingSource,因此在需要保存时,我会序列化列表 当需要加载时,我希望直接反序列化到BindingSource中,但我不知道您能做什么(这个.List成员是只读的)。因此,我必须反序列化到一个临时列表中,然后将每个项添加到BindingSource的列表中 这意味着当我完成时,内存中有两个副本,其中一个将被清除,但如果文件变大,这将是一个问题 我是否应该采取更直接的方法,或者以某种方式直接反序
我没有序列化列表,而是尝试逐个序列化列表中的元素,但生成的磁盘文件要大得多。如果大小足够大,以至于保存两次是一个问题,那么可能保存一次也是一个问题。然而如果您感兴趣,protobuf net有一个反序列化Items方法,该方法返回一个非缓冲(完全流式)IEnumerable,即无列表。所以你可以:
foreach(var item in {DeserializeItems})
bindingSource.Add(item);
我还可以保证它在磁盘上会更小,处理速度也会更快
不过,我想知道,对于大型列表,“虚拟模式”是否是一个更好的选择。当数据到达时,您可以使用它将数据从一个列表传输到另一个列表