我是getting started with Fabulous,我已经创建了标准模板并将其修改为显示位图。
我正在使用here提供的代码来生成位图流,并且我正在这样定义我的视图
let view (model: Model) dispatch =
let strm = Bmp.Create 1000 1000 (fun row col ->
let red = float row / float 1000
let blue = float col / float 1000
Color.FromRgb(red, 0.0, blue)
)
let img = ImageSource.FromStream(fun _ -> strm)
View.ContentPage(
content = View.Image(source = img)
)
这似乎工作得很好,但是如果我将let strm
更改为use strm
,它将不再起作用。为什么?
这里如何管理内存,如果我use
流以至于一旦超出范围就将其丢弃,为什么它不起作用?在这种情况下,let
是否存在任何内存泄漏问题?
答案 0 :(得分:1)
如果我使用流,以便在超出范围时立即将其丢弃?
是的。
在这种情况下,let是否存在任何内存泄漏问题?
不用担心,GC会为您处理。
现在的问题是:如果GC可以处理所有此类情况,为什么我们仍然需要auto dispose
?
首先,对于大型资源,最好是在我们不再使用它们时就对其进行处理,而不是依靠GC稍后再处理这些资源。
第二点-更重要的-对于共享资源,我们绝对必须在不使用资源后立即对其进行处置,以便其他人可以访问资源。