2GB 以上の RAM を割り当てられることを同僚に示したかったので、ちょっとしたテスト アプリケーションを作成しました。
let mega = 1 <<< 20
let konst x y = x
let allocate1MB _ = Array.init mega (konst 0uy)
let memoryHog = Array.Parallel.init 8192 allocate1MB
printfn "I'm done..."
System.Console.ReadKey() |> ignore
これは機能し、プロセスがシステムのメモリを喜んで占有しているのを実際に確認できます。ただし、多少時間がかかるため、Array.Parallel.init
.
私は、同じコードが機能しないことに気付きました。
let allocate1MB _ = Array.zeroCreate mega
より正確には、データは割り当てられず、時間もかかりません。
したがって、私の質問です。Array.zeroCreate と Array.init のセマンティクスの違いは何ですか?
毎回関数Array.init
が実行されることを理解しています。これにより、時間差が説明されます。konst 0uy
しかし、なぜArray.zeroCreate
メモリを割り当てないのですか?