none
Некорректное потребление памяти FlipView

    Вопрос

  • Есть FlipView, в котором содержится много изображений. Вот как он у меня реализован:

    <FlipView x:Name="flipView" 
                      BorderBrush="Black"
                      BorderThickness="1" 
                      Tapped="flipView_Tapped">
                <FlipView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Background="Transparent" Orientation="Horizontal" VirtualizationMode="Recycling"/>
                    </ItemsPanelTemplate>
                </FlipView.ItemsPanel>
                
                <FlipView.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <ProgressRing Background="Black" Foreground="Orange" IsActive="True"/>
                            <Image Source="{Binding Url}" />
                        </Grid>
                    </DataTemplate>
                </FlipView.ItemTemplate>
            </FlipView>

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

    Просмотр снимков сделанных в этот момент, не показали что и где потребляет такой объем памяти. Почему так случается? Происходит какая-то утечка памяти? 



    • Изменено HALF-LIFESH 18 июля 2017 г. 11:18
    16 июля 2017 г. 20:16

Ответы

  • "в определенных моментах(в основном быстрая прокрутка), резко возрастает объем потребляемой памяти"

    А разве это не ожидаемое поведение? При быстрой прокрутке большое количество изображений становится видимыми, соответственно VirtualizingStackPanel загружает их в память. Утечки памяти характеризуются другими симптомами (постепенное увеличение потребляемой памяти при длительной работе приложения, завершающееся его падением), и являются редкостью в управляемой среде.

    • Помечено в качестве ответа HALF-LIFESH 21 июля 2017 г. 11:22
    17 июля 2017 г. 3:03

Все ответы

  • "в определенных моментах(в основном быстрая прокрутка), резко возрастает объем потребляемой памяти"

    А разве это не ожидаемое поведение? При быстрой прокрутке большое количество изображений становится видимыми, соответственно VirtualizingStackPanel загружает их в память. Утечки памяти характеризуются другими симптомами (постепенное увеличение потребляемой памяти при длительной работе приложения, завершающееся его падением), и являются редкостью в управляемой среде.

    • Помечено в качестве ответа HALF-LIFESH 21 июля 2017 г. 11:22
    17 июля 2017 г. 3:03
  • У вас нет утечки памяти. Если бы она была то объем бы не стабилизировался при использовании, а неуклонно возрастал бы. Именно такое поведение и называется утечкой так как часть памяти никогда не освобождается.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    17 июля 2017 г. 6:27
  • Спасибо за уточнение, я, действительно, не правильно выразился. Но почему тогда сброс памяти не происходит, когда я останавливаюсь на элементе? Бывают случаи, когда я быстро прокручиваю и остановился на определенном элемента, а потребление памяти стало высоким. Переключаюсь на другое изображение потребление памяти снижается, снова возвращаюсь к этому элементу потребление опять увеличивается. И дело точно в не изображении, потому что, если немного "погулять" без быстрой прокрутки дальше по другим изображениям и вернутся к нему, то такого потребления памяти не происходит.
    • Изменено HALF-LIFESH 17 июля 2017 г. 8:24
    17 июля 2017 г. 8:22
  • Если вам это так интересно то используйте memory profiler, он покажет что именно выделено и кто за это держится.

    Я бы сказал чту в общем случае что человек не способен понять что и как выделяется и освобождается в сложных системах с GC. Если вам очень надо знать, то переходите на C++ и выделяйте/освобождайте все самостоятельно.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    17 июля 2017 г. 15:50