Недостаточно памяти исключение для матрицы

У меня есть исключение "'System.OutOfMemoryException" для этого простого кода (матрица 10 000 * 10 000), умноженное на себя:

#time

#r "Microsoft.Office.Interop.Excel"
#r "FSharp.PowerPack.dll"

open System
open System.IO

open Microsoft.FSharp.Math
open System.Collections.Generic


let mutable Matrix1 = Matrix.create 10000 10000 0.

let matrix4 = Matrix1 * Matrix1

У меня есть следующее ошибка:

System.OutOfMemoryException: An exception 'System.OutOfMemoryException' has been raised
   Microsoft.FSharp.Collections.Array2DModule.ZeroCreate[T](Int32 length1, Int32 length2)
   Microsoft.FSharp.Math.DoubleImpl.mulDenseMatrixDS(DenseMatrix`1 a, DenseMatrix`1 b)
   Microsoft.FSharp.Math.SpecializedGenericImpl.mulM[a](Matrix`1 a, Matrix`1 b)
   <StartupCode$FSI_0004>.$FSI_0004.main@() dans C:\Users\XXXXXXX\documents\visual studio 2010\Projects\Library1\Library1\Module1.fs:line 92
Stop due to an error

У меня есть 2 вопроса:

  1. У меня на компьютере 8 ГБ памяти, и, согласно моим расчетам, матрица 10 000 * 10 000 должна занимать 381 МБ [вычислено следующим образом: 10 000 * 10 000 = 100 000 000 целых чисел в матрице => 100 000 000 * 4 байта (целые числа из 32 битов) = 400 000 000 => 400 000 000 / (1024 * 1024) = 381 МБ ], поэтому я не могу понять, почему возникает OutOfMemoryException

  2. В более общем плане (я думаю, что это не тот случай), у меня сложилось впечатление, что F # interactive регистрирует все данные и, следовательно, перегружает память, знаете ли вы о способ освободить все данные, зарегистрированные интерактивным F #, не выходя из F #?

9
задан John Saunders 25 December 2011 в 00:10
поделиться