如何在C#中使用非常大的字典?

我想在C#应用程序中使用查找映射或字典,但是它应该存储1-2 GB的数据。

有人可以告诉我是否仍然可以使用字典类,或者我是否需要使用其他类?

编辑:我们有一个现有的应用程序,它使用oracle数据库来查询或查找对象详细信息。 然而它太慢了,因为相同的对象被反复查询。 我觉得在这种情况下使用查找映射可能是理想的,以改善响应时间。 但是我担心尺寸会不会成为问题

简答

是。 如果您的计算机有足够的内存用于结构(以及程序和系统的其余部分(包括操作系统)的开销)。

答案很长

你确定你要? 如果不了解您的应用程序,很难知道建议的内容。

  • 数据来自哪里? 一份文件? 文件? 一个数据库? 服务?
  • 这是一种缓存机制吗? 如果是这样,一旦他们暂时没有被访问,你可以将项目从缓存中过期吗? 这样,您就不必一直将所有内容都保存在内存中。
  • 正如其他人所建议的那样,如果您只是想存储大量数据,那么您可以只使用数据库吗? 这样您就不必一次将所有信息都存储在内存中。 通过索引,大多数数据库都能很好地执行快速检索。 您可以将此方法与缓存结合使用。
  • 将在内存中的数据是只读的,还是必须在某些内容发生变化时将其保留回某个存储?
  • 可伸缩性 – 您是否预计随着时间的推移,将存储在此字典中的数据量会增加? 如果是这样,你将会遇到购买能够处理这些数据量的机器非常昂贵的问题。 如果是这种情况,您可能希望查看分布式缓存系统(AppFrabric可以想到),因此您可以横向扩展(更多计算机)而不是垂直扩展(一个非常昂贵的失败点)。

UPDATE

根据海报的编辑,听起来缓存在这里会有很长的路要走。 有很多方法可以做到这一点:

  • 简单的字典缓存 – 只需按要求缓存内容。
  • 内存缓存
  • 缓存应用程序块我不是这个实现的忠实粉丝,但其他人已经取得了成功。

只要你使用64GB的机器,是的,你应该可以使用那么大的字典。 但是如果你有那么多数据,数据库可能更合适(cassandra实际上只是一个巨大的字典,而且总是有MySQL)。

当你说1-2GB的数据时,我认为你的意思是这些项目是累计包含1-2GB的复杂对象。

除非它们是结构(并且它们不应该是),否则字典并不关心项目的大小。
只要你有少于约24个项目(我从帽子中取出这个数字),你可以尽可能多地存储在内存中。

但是,正如其他人所建议的那样,您应该使用数据库。
您可能希望使用内存数据库,例如SQL CE。

你可以但是对于像你这样大的字典你最好使用数据库

使用数据库。 确保你有一个好的数据库模型,放入正确的索引,然后离开。

您可以使用子管理。

 Dictionary 

KeyAKeyB一些常见部分。

例如,如果您有一个String字典,则可以将第一个字母用作KeyA