anh có chữ "'System.OutOfMemoryException" ngoại lệ cho mã này đơn giản (một ma trận 10 000 * 10 000) nhân với chính nó:Out of ngoại lệ bộ nhớ cho một ma trận
#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
Tôi có lỗi sau:
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
tôi có do đó 2 câu hỏi:
tôi có một bộ nhớ 8 GB trên máy tính của tôi và theo c của tôi alculation một ma trận 10 000 * 10 000 nên 381 MB [tính theo cách này:
10 000 * 10 000 = 100 000 000
số nguyên trong ma trận =>100 000 000 * 4 bytes (integers of 32 bits) = 400 000 000 => 400 000 000/(1024*1024) = 381 MB
] vì vậy tôi không thể hiểu tại sao có mộtOutOfMemoryException
Tổng quát hơn (nó không phải là trường hợp ở đây tôi nghĩ), Tôi có ấn tượng rằng F # tương tác đăng ký tất cả các dữ liệu và do đó quá tải bộ nhớ, bạn có biết cách để giải phóng tất cả các dữ liệu được đăng ký bởi F # tương tác mà không thoát F #?
Bạn có nhiều * bộ nhớ tùy ý * trong máy của mình; nhớ, không gian đĩa cũng là bộ nhớ. RAM chip chỉ là một cách nhanh chóng để bộ nhớ cache bộ nhớ đĩa. Bạn có thể có 8GB hoặc .5 GB hoặc 1000GB bộ nhớ vật lý; nó hoàn toàn không liên quan. Bộ nhớ bạn đang sử dụng là * không gian địa chỉ ảo cho mỗi quá trình * và không có gì liên quan đến dung lượng RAM hoặc dung lượng đĩa bạn có. –