Я получил известие от кого-то, что максимальный размер массива в.NET составляет 4 ГБ? Просто удивление, если это верно. Вы не мечтали бы о выполнении этого на 32-разрядной.NET, но в 64-разрядной системе с 12 ГБ RAM, возможно, просто возможно, Вы могли бы хотеть сделать это.:-)
Теоретически массив может содержать не более 2 147 483 647 элементов, поскольку для индексации он использует int. Фактический предел немного ниже, в зависимости от типа, содержащегося в массиве.
Однако в .NET CLR существует ограничение на один объект не более 2 ГБ, даже в 64-битной среде. Это было сделано намеренно .
Вы можете легко создать реализацию IList
, которая внутри хранит несколько массивов и позволяет вам расширяться за пределы ограничения одного объекта в 2 ГБ, но в самой структуре такого нет.
Однако, как правило, это не проблема. В большинстве случаев у вас будут массивы, указывающие на большие классы, поэтому массив просто содержит ссылки. Это означало бы, что ваш массив может эффективно указывать на многие, многие ГБ памяти, но сам массив не может быть> 2 ГБ.
Обратите внимание, что, начиная с .NET 4.5, доступна новая опция, позволяющая использовать 64-битные приложения: gcAllowVeryLargeObjects . С помощью этого нового набора параметров можно получить элементы UInt32.MaxValue
(4 294 967 295) в многомерном массиве, хотя одномерный массив по-прежнему ограничен 2 146 435 071 элементом (2 147 483 591 для однобайтовых массивов или массивов структуры, не содержащей ничего кроме байта).
Новые правила с этой опцией:
Пометьте UIAlertView
следующим образом:
#define kAlertViewOne 1
#define kAlertViewTwo 2
UIAlertView *alertView1 = [[UIAlertView alloc] init...
alertView1.tag = kAlertViewOne;
UIAlertView *alertView2 = [[UIAlertView alloc] init...
alertView2.tag = kAlertViewTwo;
, а затем разделите их в методах делегата с помощью следующих тэгов:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(alertView.tag == kAlertViewOne) {
// ...
} else if(alertView.tag == kAlertViewTwo) {
// ...
}
}
-121--1218905- Можно щелкнуть правой кнопкой мыши на URL-адресе в терминале, и первый параметр в контекстном меню - «Открыть URL-адрес». Не идеально, но, возможно, достаточно хорошо?
-121--691366-Максимальный размер любого объекта в .NET равен 2GB.
Это, конечно, накладывает жесткий колпачок на то, насколько большой вы можете сделать необработанный массив.
Вы можете создать «массив массивов» (и даже создать свой собственный индексатор для доступа к ним, как если бы это был один смежный массив) настолько большой, насколько вам угодно, если вы определяете для него свой собственный класс.