mam „'System.OutOfMemoryException” wyjątek tego prostego kodu (10 000 • 10 000 matrycy) pomnożone przez siebie:Z wyjątkiem pamięci w matrycy
#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
I mają następujące błąd:
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
dlatego mam 2 pytania:
mam 8 GB pamięci na moim komputerze i zgodnie z moim c alculation 10 000 * 10 000 matryca powinna wziąć 381 MB [obliczane w ten sposób:
10 000 * 10 000 = 100 000 000
całkowitymi w macierzy =>100 000 000 * 4 bytes (integers of 32 bits) = 400 000 000 => 400 000 000/(1024*1024) = 381 MB
], więc nie mogę zrozumieć, dlaczego nie jestOutOfMemoryException
Bardziej ogólnie (nie jest w tym przypadku myślę), Mam wrażenie, że F # interactive rejestruje wszystkie dane i dlatego przeciąża pamięć, czy znasz sposób na uwolnienie wszystkich danych zarejestrowanych przez F # interaktywny bez wychodzenia z F #?
Masz dowolnie dużo * pamięci * w swoim komputerze; pamiętaj, że przestrzeń dyskowa to również pamięć. Chipy RAM to tylko szybki sposób na buforowanie pamięci dyskowej. Możesz mieć 8 GB lub 0,5 GB lub 1000 GB pamięci fizycznej; to zupełnie nieistotne. Brakująca pamięć to * procesowa wirtualna przestrzeń adresowa *, która nie ma nic wspólnego z ilością dostępnej pamięci RAM lub dysku. –