【问题标题】:Restriction to the C# Dictionary对 C# 字典的限制
【发布时间】:2013-06-07 22:02:20
【问题描述】:

我正在为我的 SDK 制作一个包含数百个类的 C# 应用程序。我需要将这些类的托管对象存储在我的 C# 字典中。 但是我不知道该字典可以容纳多少对象?这意味着对于所有具有与之关联的整数键的对象来说,这将是一个很好的可行解决方案吗?如果有其他方法,欢迎提出这些想法。

【问题讨论】:

  • 本地数据库,如 SQLite,如果内存不足,可能是更好的方法。
  • 如果您不知道,请测试一下。如果遇到性能问题或内存不足,请使用本地存储。
  • 你研究过C#字典的容量吗?
  • 当您说managed objects of that classes 时,您的意思是在对象实例的生命周期管理中与在控制反转容器中一样吗?
  • @Quinton Bernhardt:他可能指的是objects whose memory is managed by the .NET GC

标签: c#


【解决方案1】:

如果您的键是整数,您会受到键的总数等于Int32 的值的总数以及limit on memory consumed by a .NET process 的限制。当然,您可能会在此之前用完“容量”,具体取决于系统的其余部分。您必须准确地测试这些限制在您的应用程序的实际用例中是什么,因为我们不知道您的对象的大小或您的应用程序的负载等。

如果您担心没有足够的内存,您应该强烈考虑本地存储,甚至像 SQLite 这样的东西。

【讨论】:

    【解决方案2】:

    Dictionary 类的上限为 2^31 个项目,如果您在 64 位平台上运行 .NET 4.5 并使用 <gcAllowVeryLargeObjects> element

    如果您不启用gcAllowVeryLargeObjects,并且对于早期版本的 .NET,您可以在字典中存储的项目数会少一些。使用Int32 键和值的引用类型,字典在 64 位平台上最多可容纳约 8940 万个项目,在 32 位平台上最多可容纳 6170 万个项目。当然,假设您有足够的内存来保存字典和值。

    http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=665查看我关于字典限制的文章

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2019-12-21
      相关资源
      最近更新 更多