F # Fabulous / Xamarin управление памятью, почему я не могу использовать (автоматически удалять) этот поток? - PullRequest
2 голосов
/ 05 мая 2019

Я начал работать с Fabulous , и я создал стандартный шаблон и изменил его для отображения растрового изображения.

Я использую предоставленный код здесь чтобы создать поток растрового изображения, и я определяю свой вид как таковой

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 Ответ

1 голос
/ 06 мая 2019

, если я использую поток, чтобы он удалялся, как только он выходит из области видимости?

Да, точно.

Есть ли какие-либо проблемы утечки памяти с let в этом случае?

Не беспокойтесь, GC будет обрабатыватьэто для вас.

Теперь вопрос: если GC может обрабатывать все такие случаи, зачем нам все еще нужны auto dispose?

Во-первых, для больших ресурсов лучше распоряжаться имикак только мы их больше не используем, вместо того, чтобы полагаться на GC, который через некоторое время утилизирует ресурсы.

Во-вторых, что более важно, для совместного использования ресурсов, мы определенно должны утилизировать их, как только мыне используйте его больше, чтобы другие могли получить доступ к ресурсам.

...