我正在使用一个系统,该系统具有包含超过 500 万个项目的列表和字典,其中每个项目通常是具有多达 90 个原始属性的平面 dto。使用 protobuf-net 将集合持久保存到磁盘以进行弹性和子序列处理。
不出所料,我们在处理和序列化过程中遇到了 LOH。
我们可以通过使用 ConcurrentBag 等来避免处理过程中的 LOH,但是在序列化时我们仍然会遇到问题。
目前,集合中的项目被分批成 1000 个组并并行序列化到内存流中。每个字节数组都放置在并发队列中,以便稍后写入文件流。
虽然我理解这是试图做什么,但它似乎过于复杂。感觉 protobuf 本身应该有一些东西可以在不使用 LOH 的情况下处理大量集合。
我希望我犯了一个小学生的错误——我忽略了一些设置。否则,我将寻找编写自定义二进制读取器/写入器。
我应该指出,我们正在使用 4.0,希望尽快迁移到 4.5,但意识到尽管 GC 有所改进,但我们无法克服这个问题。
任何帮助表示赞赏。