byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 07:30
Оценка: 3 (1)
Для тестов потребовался массив c 2GB байт.

64-приложение. FW4.7.2.

И нифига не получается выделить. Максимум int.MaxValue-56 байт

  Тестовый код
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
         try
         {
          //var buf=new byte[int.MaxValue]; //OUTOFMEMORY
          //var buf=new byte[int.MaxValue-55]; //OUTOFMEMORY
          var buf=new byte[int.MaxValue-56]; //ok

          buf[0]=123;
         }
         catch(Exception e)
         {
          Console.WriteLine("{0}",e.Message);
         }
        }
    }
}

Интернеты предлагают указать <gcAllowVeryLargeObjects enabled="true" /> в конфигурационном файле. Указал, не помогает

  App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
        <gcAllowVeryLargeObjects enabled="true" />
  </runtime>
  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

Что я не так сделал?

Заранее благодарю за помощь!
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: byte[2GB]
От: Danchik Украина  
Дата: 18.04.19 08:32
Оценка: 8 (1)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Для тестов потребовался массив c 2GB байт.


Пишут что by design
https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/
Re[2]: byte[2GB]
От: IID Россия  
Дата: 18.04.19 09:00
Оценка: +1 -3
Здравствуйте, Danchik, Вы писали:

D>Пишут что by design

D>https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/

Какой убогий этот ваш Г-шарп
kalsarikännit
Re[2]: byte[2GB]
От: vvv848165@ya.ru  
Дата: 18.04.19 09:34
Оценка:
Здравствуйте, Danchik, Вы писали:


D>Пишут что by design

D>https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/

дак это ж танцы с бубном
Re: byte[2GB]
От: okon  
Дата: 18.04.19 09:36
Оценка: +1
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Для тестов потребовался массив c 2GB байт.


КД>64-приложение. FW4.7.2.


КД>Заранее благодарю за помощь!


У тебя наверное стоит AnyCPU и по умолчанию в Build -> Prefer 32bit.
Поэтому скорее всего оно в 32х битном режиме запускается.
Убери эту галочку.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[2]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 09:45
Оценка:
Здравствуйте, okon, Вы писали:

O>У тебя наверное стоит AnyCPU и по умолчанию в Build -> Prefer 32bit.

O>Поэтому скорее всего оно в 32х битном режиме запускается.
O>Убери эту галочку.

Конечно я все это убрал. Более того — сказал ему чтобы компилил под 64 бита
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: byte[2GB]
От: Danchik Украина  
Дата: 18.04.19 09:51
Оценка: 29 (5)
Здравствуйте, Коваленко Дмитрий, Вы писали:

[Skip]

КД>Заранее благодарю за помощь!


Тут ты натолкнулся на ограничение размера массива не в байтах, а в длине.

Так выделяем больше
var bytes = new int[2_146_435_071];

Это число и есть максимально допустимым размером массива.
Re[3]: byte[2GB]
От: okon  
Дата: 18.04.19 09:57
Оценка:
КД>Конечно я все это убрал. Более того — сказал ему чтобы компилил под 64 бита

Проверил у меня без галочки работает.
С галочкой Prefer 32bit — не работает.

p.s.

Вот этот вариант зависит от галки
var buf=new byte[int.MaxValue-56]; //ok



Такой вариант, да не работает в обоих случаях
var buf=new byte[int.MaxValue];
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Отредактировано 18.04.2019 10:10 okon . Предыдущая версия .
Re[2]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 09:57
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>>Для тестов потребовался массив c 2GB байт.


D>Пишут что by design

D>https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/

2005 год.

however you would be hard pressed to actually manage to allocate a 2GB object on the 32-bit CLR because the virtual address space is simply too fragmented to realistically find a 2GB hole.


  2019 год.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 10:07
Оценка:
Здравствуйте, okon, Вы писали:

КД>>Конечно я все это убрал. Более того — сказал ему чтобы компилил под 64 бита


O>Проверил у меня без галочки работает.

O>С галочкой Prefer 32bit — не работает.

Ты хочешь сказать, что следующий код отработал без проблем?

var buf=new byte[int.MaxValue];


Под FW4.7.2?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[5]: byte[2GB]
От: Danchik Украина  
Дата: 18.04.19 10:08
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, okon, Вы писали:


КД>>>Конечно я все это убрал. Более того — сказал ему чтобы компилил под 64 бита


O>>Проверил у меня без галочки работает.

O>>С галочкой Prefer 32bit — не работает.

КД>Ты хочешь сказать, что следующий код отработал без проблем?


КД>
КД>var buf=new byte[int.MaxValue];
КД>


КД>Под FW4.7.2?


Вряд ли, я тоже все это перепробовал, пока не натолкнулся на эту статью
http://ntcoder.com/bab/2013/10/08/net-gcallowverylargeobjects-elementbeat-the-2gb-array-size-limit-on-64-bit/
Re[5]: byte[2GB]
От: okon  
Дата: 18.04.19 10:12
Оценка: +1
КД>Ты хочешь сказать, что следующий код отработал без проблем?

КД>
КД>var buf=new byte[int.MaxValue];
КД>


КД>Под FW4.7.2?


Не, я взял не тот вариант, не заметил закоментаренные. который int.MaxValue-56, он у меня выдал не ok на AnyCPU/Prefer32bit.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Отредактировано 18.04.2019 10:13 okon . Предыдущая версия .
Re[6]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 10:15
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Вряд ли, я тоже все это перепробовал, пока не натолкнулся на эту статью

D>http://ntcoder.com/bab/2013/10/08/net-gcallowverylargeobjects-elementbeat-the-2gb-array-size-limit-on-64-bit/

Мне просто было лень вникать в эту статью на MSDN

В целом — милота. Снаружи все круто, а внутри .... 32-битная Visual Studio
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: byte[2GB]
От: Flem1234  
Дата: 18.04.19 10:29
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Для тестов потребовался массив c 2GB байт.


Может подойдет массив структур большего размера, например Int32?

using System;

namespace ConsoleApp10
{
    class Program
    {
        static void Main(string[] args)
        {
            const long MAX_SIZE = 0X7FEFFFFFL ;
            Console.WriteLine(MAX_SIZE * 4L);
            var ar = new Int32[MAX_SIZE];
            Console.WriteLine("Ok");
        }
    }
}


8585740284
Ok
Press any key to continue . . .
Re[2]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 11:27
Оценка:
Здравствуйте, Flem1234, Вы писали:

КД>>Для тестов потребовался массив c 2GB байт.


F>[C#]

F>Может подойдет массив структур большего размера, например Int32?
[/code]

Нет, мне нужен именно массив байт на C# — byte[2GB].

Альтернативы и обходные пути мне не интересны.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: byte[2GB]
От: hi_octane Беларусь  
Дата: 18.04.19 13:19
Оценка:
КД>Альтернативы и обходные пути мне не интересны.
Через маршалинг или Span<T> в байты его тоже не интересно?
Re[4]: byte[2GB]
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.04.19 13:39
Оценка: :)
Здравствуйте, hi_octane, Вы писали:

КД>>Альтернативы и обходные пути мне не интересны.

_>Через маршалинг или Span<T> в байты его тоже не интересно?

Нет. Мне нужно пройти к своей кружке пива. Голые женщины меня не интересуют
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: byte[2GB]
От: smbdnew  
Дата: 18.04.19 18:26
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Нет, мне нужен именно массив байт на C# — byte[2GB].

КД>Альтернативы и обходные пути мне не интересны.

можно выделить каким нибудь virtual alloc, например
Re[5]: byte[2GB]
От: rudzuk  
Дата: 18.04.19 18:27
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД> _>Через маршалинг или Span<T> в байты его тоже не интересно?


КД> Нет. Мне нужно пройти к своей кружке пива. Голые женщины меня не интересуют


Вот она, старость...
avalon/2.0.6
Re: byte[2GB]
От: kov_serg Россия  
Дата: 18.04.19 19:16
Оценка: -1
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Что я не так сделал?

Связался с .Net
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.