Итак, вы пытаетесь создать массив из 100 миллионов дублей (каждый из которых занимает 800 МБ) - дважды :
// This line will allocate an array...
double[,] myDoubleArray = new double[bound0,bound1];
// The method allocates *another* array...
myDoubleArray = intarraytodoublearray(myIntArray);
Зачем беспокоиться об инициализации myDoubleArray
дляпустой массив, а затем переназначение значения?Просто используйте:
double[,] myDoubleArray = intarraytodoublearray(myIntArray);
Это уменьшит вдвое объем памяти, используемой для одной вещи.Теперь, будет ли это работать в этот момент, я не уверен ... это зависит от того, как Mono работает с большими объектами и памятью.Если вы используете много памяти, вы определенно хотите убедиться, что вы используете 64-битную виртуальную машину.Например:
gmcs -platform:x64 ...
(Важной сборкой для компиляции с помощью этого параметра является основное приложение, которое запускает виртуальную машину. Неясно, какое приложение вы пишете.)
Кроме того, intarraytodoublearray
- ужасное имя - он использует псевдоним int
вместо имени Int32
фреймворка и игнорирует соглашения о капитализации.Int32ArrayToDoubleArray
будет лучше.