【问题标题】:Maximum size of string array in C# [duplicate]C#中字符串数组的最大大小[重复]
【发布时间】:2018-09-16 07:22:03
【问题描述】:

我有一些文件夹可能包含很多文件,我想知道字符串数组可以容纳的最大大小是多少,我的意思是数组有多少个文件名:

string[] files=Directory.GetFiles(@"c:\Dir\");可以持有吗?

请注意,我问的是 string 数组,而不是其他问题。

【问题讨论】:

  • @Fruchtzwerg 它谈到了 int 数组,我问的是 string 数组,请仔细阅读
  • 这没什么区别。
  • 数组大小限制足够大,不太可能成为问题,但如果您仍然害怕,请改用Directory.EnumerateFiles() - 它返回 IEnumerable

标签: c# arrays


【解决方案1】:

Array Class

默认情况下,数组的最大大小为 2 GB在一个 64位环境,可以通过设置 gcAllowVeryLargeObjects 配置元素的启用属性 在运行时环境中为 true。 但是,数组仍然是 限制在总共 40 亿个元素,并且最大索引为 任何给定维度的 0X7FEFFFFF(0X7FFFFFC7 用于字节数组和 单字节结构的数组)。

Ňuf的非常有用的评论

但应该注意的是,字符串本身不计入 2GB 大小限制,因为数组只包含对这些的引用 字符串。所以字符串数组中的最大元素数约为。 32位进程500M,64位进程2G。也只有这个限制 适用于 .NET CLR,其他实现可能有不同的限制 (例如,64 位上的 Mono 支持更大的数组 --enable-big-arrays 选项)

【讨论】:

  • 这也与 string 数组有关?
  • @CPU 是的,它适用于任何类型的数组
  • 但应该注意的是,字符串本身不计入 2GB 大小限制,因为数组只包含对这些字符串的引用。所以字符串数组中的最大元素数约为。 32位进程500M,64位进程2G。此外,此限制仅适用于 .NET CLR,其他实现可能有不同的限制(例如,64 位上的 Mono 支持带有 –enable-big-arrays 选项的更大数组)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2014-04-24
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多