我正在处理一个系统,其中包含超过500万个列表和字典,每个项目通常是一个带有高达90个原始属性的平面dto。使用protobuf-net将这些集合持久化到磁盘以实现弹性和后续处理。
毫不奇怪,在处理和序列化期间我们会遇到LOH问题。
我们可以通过使用ConcurrentBag等来避免在处理期间遇到LOH问题,但是在序列化时仍然会存在问题。
目前,集合中的项目被分批成1000个一组并行地序列化到内存流中。 然后将每个字节数组放入并发队列中,以便稍后写入文件流。
虽然我理解了这样做的目的,但它似乎过于复杂。感觉protobuf本身应该有处理大型集合而不使用LOH的解决方案。
我希望我犯了低级错误-可能有一些设置我忽略了。否则,我将尝试编写自定义二进制读写器。
我应该指出,我们正在使用4.0版本,计划很快升级到4.5,但我们意识到即使有GC改进,我们也无法解决这个问题。
任何帮助都将不胜感激。