c# - 存放大件元素

标签 c# serialization storage

存储大物体的最佳方式是什么?就我而言,它类似于树或链接列表。

我尝试了以下方法:

1) 关系数据库

不适合树结构。

2) 文档数据库

我尝试了 RavenDB,但当我调用 SaveChanges 方法时它引发了 System.OutOfMemory 异常

3) .Net 序列化

运行速度非常慢

4)Protobuf

无法反序列化List<List<>>类型,我不确定链接结构。

那么……?

最佳答案

你提到了 protobuf - 我经常将 protobuf-net 与大小数百兆字节的对象一起使用,但是:它确实需要适本地编写为 DTO,并且最好编写为树(不是双向图,尽管部分场景支持使用)。

对于双向链表,这可能意味着:将“先前”链接标记为序列化,然后在反序列化后回调中进行修复,以正确地设置“上一个”链接。通常很容易。

您是正确的,它当前不支持嵌套列表。通过使用具有列表的列表来回避这通常是微不足道的,但我很想将其隐式化 - 即库应该能够模拟这一点,而无需更改您的模型。如果您对我这样做感兴趣,请告诉我。

如果您有想要序列化的模型的具体示例,并希望我提供指导,请告诉我 - 如果您无法在此处发布它,那么我的电子邮件位于我的个人资料中。完全取决于你。

关于c# - 存放大件元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959530/

相关文章:

c++ - 使用 boost 通过 TCP 序列化和发送对象

c# - 为什么在 C# 中创建 WebRequest 时未设置 Date header ?

javascript - 如何在不重新启动应用程序的情况下清除所有用户的快速 session ?

c# - 对具有 sytem.DateTime 值 C# 的属性进行单元测试

c# - Visual Studio "Could not copy".... 在构建期间

c# - 如何在 .NET 中创建线程转储? (一个 la JVM 线程转储)

java - 测试序列化编码

c# - Visual Studio 2010 无法再构建 .NET v3.5

WCF 使用消息协定序列化枚举

ssh - 如何通过 ssh 连接到 Google 计算引擎磁盘?