我想向同事展示你可以分配超过 2GB 的内存,所以我做了一个小测试应用程序。
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
分配内存呢?