如何序列化大型集合

Joe*_*Joe 6 c# serialization protobuf-net large-object-heap

我正在使用一个包含超过五百万个项目的列表和词典的系统,其中每个项目通常是一个具有多达90个原始属性的平面dto.使用protobuf-net将集合持久保存到磁盘,以实现弹性和子序列处理.

不出所料,我们在处理和序列化过程中遇到了LOH.

我们可以在处理过程中使用ConcurrentBag等来避免LOH,但是在序列化时我们仍遇到问题.

目前,集合中的项目被批量分组为1000个并且并行地序列化为内存流.每个字节数组都放在一个并发队列中,以便稍后写入文件流.

虽然我明白这是在尝试做什么,但它似乎过于复杂.感觉就像protobuf本身应该有一些东西可以在不使用LOH的情况下处理大量的收藏.

我希望我犯了一个小学生错误 - 我忽略了一些设置.否则,我将寻求编写自定义二进制读取器/写入器.

我应该指出我们正在使用4.0,希望尽快转向4.5但是我们意识到尽管GC有所改进,我们仍然无法解决这个问题.

任何帮助赞赏.

sin*_*ino 0

将数据写入磁盘,并且不使用内存流。

使用 StreamReader 读取,因此如果您需要同时加载所有数据进行处理,然后通过将它们存储在临时表中,在 SQL Server 中进行处理,则不必在内存中保留大量数据。

内存不是存储大数据的地方。

  • 如果数据不是关系型的,我不认为 SQL Server 是一个很好的解决方案来建议如何存储和处理它。 (2认同)