0

我有一个项目,它有一个相当复杂的嵌套(引用向上和向下调用引用的对象)对象(类)存储在字典中,例如:

public static Dictionary<string, Object1> DObject { get; set; }

Object1 是一个复杂的类。它不像“地址簿”或“个人信息”类。类本身有数组,另一个对象的字典。那些对象引用它上面的类,等等。

因为 DObject 在内存中的大小可以是 1GB+,所以我将使用 BinaryFormatter 将它序列化为一个文件。因为我需要加载这个对象,所以我正在考虑使用 MemoryMappedFile。新的键和值可能会添加到字典中。对象中可能有更多数据(添加/更新)等。MMF 是否改变大小?如何访问内存映射文件中 DObject 中的某个键?内存中是否有像哈希表这样的搜索机制,所以我可以像字典一样找到某个键​​并获取它的值?这个 MMF 是如何工作的?

我的理想想法是。在磁盘上有一个大文件(2GB+)。我在磁盘上快速更新字典中的对象,就像在磁盘上保存内存一样。一切都很快。键值查找一路。我查找、编辑值、保存等……我必须随时快速访问这个 2GB+ 的对象。如果 WCF 服务器重新启动,我需要快速访问这个 2GB+ 大小的对象。这就是为什么我在想1)序列化2)。从/向 MMF 加载和读取。我现在主要关心的是速度。换句话说,我每次调试项目时都不能从头开始重新加载这个 2GB 数据(这需要很长时间)。

关于我应该如何处理这种情况的任何建议、想法和想法。

4

1 回答 1

0

您不能将DObject自己保存在内存映射文件中。.NET 对象往往一直在移动,您不能强迫它们留在内存中的一个位置(您可以固定它们,但您真的不想这样做)。您可以序列化对象并将其写入文件,但这意味着每次写入超过 1GB 的数据。

为什么不采用标准方式,将您的对象“序列化”为一组数据库表?

于 2012-02-21T07:07:52.947 回答