LongLength用于.Net阵列的目的是什么?

时间:2008-12-02 02:38:15

标签: .net arrays memory

.Net中数组的LongLength属性的用途是什么?使用长度的标准整数,您可以容纳多达20亿个索引。真的有人使用.Net维护一个包含20亿个元素的单个阵列。即使每个元素都是单个字节,仍然是2 GB的数据。在.Net中使用这么大的数组是否可行?

4 个答案:

答案 0 :(得分:5)

例如,如果你有一个> 2 GB文件,需要一次将其全部读入内存,这将调用这样的数组。并不是说这在大多数情况下都是推荐的方法,但可能有一些情况(在一个功能强大的64位系统上有很多内存),这可能是必需的(可能出于性能原因?)。

编辑:当然,应该注意的是,从CLR 2.0开始,有一个数组>实际上并不支持2 GB(LongLength的所有实现都是将长度转换为long,并且尝试创建更大的数组将失败)...但是也许Microsoft计划稍后添加支持...?

答案 1 :(得分:5)

有一所学校被称为“0,1或N”学校认为你应该没有任何东西;一件事;或任何数量的东西,如资源许可。

换句话说,如果您不需要,请不要设置任意限制。任意限制给了我们如下的怪物:

  • 早期PC的640K限制。
  • 缓冲区溢出漏洞。
  • 可怕的CHS磁盘寻址方案。

请记住,即使是20亿个64位整数也只占用

            17,179,869,184 bytes of the
18,446,744,073,709,551,616 bytes of 64-bit address space available.

这不到千万分之一,或者10 -9 ,或者在用完地址空间之前你可能有许多数百万个这样庞大的数组。

答案 2 :(得分:3)

另外,它会返回所有数组维度中元素的总数,因此它可以是一个“只有”5亿个元素和4个维度的数组使它需要是64位int。

答案 3 :(得分:1)

在64位方案中,很可能有一个包含超过20亿条目的数组。 LongLength确实是为了支持这种情况。

是否实际使用。我可以肯定地说,在某个地方有一些客户认为这是一项至关重要的业务需求。客户可以找到您从未想过的功能。