F#Fabulous / Xamarin内存管理,为什么不能使用(自动处理)此流?

时间:2019-05-05 12:07:26

标签: xamarin memory-management f# stream dispose

我是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是否存在任何内存泄漏问题?

1 个答案:

答案 0 :(得分:1)

  

如果我使用流,以便在超出范围时立即将其丢弃?

是的。

  

在这种情况下,let是否存在任何内存泄漏问题?

不用担心,GC会为您处理。

现在的问题是:如果GC可以处理所有此类情况,为什么我们仍然需要auto dispose

首先,对于大型资源,最好是在我们不再使用它们时就对其进行处理,而不是依靠GC稍后再处理这些资源。

第二点-更重要的-对于共享资源,我们绝对必须在不使用资源后立即对其进行处置,以便其他人可以访问资源。