Я хочу запустить исполняемый файл .NET, которому требуется более 4 ГБ ОЗУ на OSX 10.9. У меня была установлена Xamarin Studio, но AFAIKT Xamarin не поставляется с 64-битной моно-сборкой, поэтому я решил создать обычную 64-битную монофонию с конфигурацией «с большой-кучей = да» и установить ее в другом месте ,Как настроить моно для использования более 4 ГБ памяти?
git clone https://github.com/mono/mono
cd mono
./configure --prefix=<my-local-dir> --enable-nls=no --with-large-heap=yes
make
make install
(я построил 64-битную F # и установлен в моем-местном-каталог, после "Вариант 3" в this page.)
Однако, когда я использую 64-битный моно для запуска исполняемый файл (программа F #, построенная с канонической «fsharpc» в Xamarin), она по-прежнему падает с исключением System.OuOtfMemory. Я попытался это:
export PATH=$PATH:<my-local-dir>/bin
MONO_GC_PARAMS=max-heap-size=5g <my-local-dir>/bin/mono <my-executable>
И это дает предупреждение
Warning: In environment variable `MONO_GC_PARAMS': `max-heap-size` must be an integer.
(это сообщение об ошибке немного вводит в заблуждение, я думаю, что это на самом деле означает 5g слишком велик и не поддерживается, потому что это не жалуйтесь, если я поставлю там «3g»). И программа по-прежнему падает с тем же исключением в момент, когда она превышает память.
Я пропустил что-нибудь важное? Как настроить моно, чтобы иметь размер кучи более 4G?
Собственно, 5g (которое оценивается как число 5,368,709,120). Это не целое число (при условии, что 32-битные длинные целые числа), поскольку оно слишком велико. Забавно, вы попадаете в 32-битный предел TWICE :) –
да, вы определенно правы! На самом деле, 5g, не будучи признанным как «целое число», предполагает, что моно-двоичное я закончил строительство, все еще было 32-битным двоичным кодом. Я только что узнал «новый» трюк, что «mono -V» распечатает архитектуру, где я проверил, что она по-прежнему остается x86 вместо amd64. После исправления проблемной переменной среды проблема решена. – trek42