Какова цель LongLength для .Net Arrays? - PullRequest
5 голосов
/ 02 декабря 2008

Какова цель свойства LongLength для массивов в .Net. Используя стандартное целое для длины, вы можете разместить до 2 миллиардов индексов. Действительно ли люди используют .Net для поддержки единого массива с более чем 2 миллиардами элементов. Даже если бы каждый элемент был одним байтом, это все равно было бы 2 ГБ данных. Можно ли использовать такой большой массив в .Net?

Ответы [ 4 ]

5 голосов
/ 02 декабря 2008

Существует школа мысли, известная как школа «0, 1 или N», которая считает, что у вас не должно быть ничего; один из чего-то; или любое число чего-либо, если позволяют ресурсы.

Другими словами, не устанавливайте произвольные ограничения, если это не нужно. Произвольные ограничения дали нам такие чудовища как:

  • ограничение в 640K на ранних ПК.
  • Уязвимости переполнения буфера.
  • отвратительная схема адресации диска CHS.

Имейте в виду, что даже два миллиарда 64-разрядных целых чисел занимают

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

Это меньше 1 000-миллионной, или 10 -9 , или вы можете иметь много миллионов этих массивных массивов, прежде чем закончится пространство адреса.

5 голосов
/ 02 декабря 2008

Например, если у вас был файл> 2 ГБ и вам нужно было сразу прочитать все это в память, это потребовало бы такого массива. Не то чтобы это был рекомендуемый подход в большинстве случаев, но вполне может быть, что в некоторых случаях (на достаточно мощной 64-битной системе с большим объемом памяти) это может потребоваться (может быть, из-за соображений производительности?). *

Редактировать: Конечно, следует отметить, что начиная с CLR 2.0, наличие массива> 2 ГБ фактически не поддерживается (все, что делает реализация LongLength, преобразует Length в long и пытается создать массив большего размера. потерпит неудачу) ... но, возможно, Microsoft планирует добавить поддержку позже ...?

3 голосов
/ 02 декабря 2008

Кроме того, возвращается общее количество элементов в всех измерениях массива, поэтому он может быть массивом с "всего лишь" полмиллиардом элементов и 4 измерениями, чтобы сделать его должен быть 64-битным int.

1 голос
/ 02 декабря 2008

Очень возможно иметь массив с более чем 2 миллиардами записей в 64-битном сценарии. LongLength действительно предназначен для поддержки таких сценариев.

Относительно того, действительно ли это используется. Я могу с уверенностью сказать, что где-то есть клиент, который считает это жизненно важной потребностью бизнеса. Клиенты находят применение для функций, которые вы никогда не считали возможным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...