ho l'eccezione "'System.OutOfMemoryException" per questo semplice codice (una matrice di 10 000 * 10 000) moltiplicato per se stesso:Fuori un'eccezione di memoria per una matrice
#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
ho il seguente errore:
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>[email protected]() dans C:\Users\XXXXXXX\documents\visual studio 2010\Projects\Library1\Library1\Module1.fs:line 92
Stop due to an error
ho quindi 2 domande:
ho un 8 GB di memoria sul mio computer e secondo la mia c ALCOLO una matrice di 10 000 * 10 000 dovrebbe prendere 381 MB [calcolato in questo modo:
10 000 * 10 000 = 100 000 000
interi nella matrice =>100 000 000 * 4 bytes (integers of 32 bits) = 400 000 000 => 400 000 000/(1024*1024) = 381 MB
] in modo non riesco a capire il motivo per cui v'è unOutOfMemoryException
Più in generale (non è il caso qui penso), Ho l'impressione che F # interattivo registri tutti i dati e quindi sovraccarichi la memoria, conosci un modo per liberare tutti i dati registrati da F # interattivi senza uscire da F #?
Avete arbitrariamente molto * memoria * nella vostra macchina; ricorda, lo spazio su disco è anche la memoria. I chip RAM sono solo un modo veloce per memorizzare nella memoria del disco. Potresti avere 8 GB o .5 GB o 1000 GB di memoria fisica; è completamente irrilevante. La memoria che stai esaurendo è * per-process virtual address space *, e questo non ha nulla a che fare con quanta RAM o spazio su disco hai. –