사용자 제어의 시각적 상태로 인해 렌더링 속도가 느려집니다.

오늘 Ipsit

GridView에서 여러 제품을 렌더링하는 뷰가있는 UWP 응용 프로그램을 개발 중이며 렌더링 할 각 제품에 대한 데이터 템플릿을 만들었습니다. 아래는 첨부 된 XAML 코드입니다.

Visual Studio Profiler를 실행하여 레이아웃 렌더링에 걸리는 시간을 디버깅 할 때 레이아웃 섹션에서 각 제품 템플릿의 ListViewItemPresenter가 렌더링하는 데 약 6-7ms가 걸리므로 GridView에 10 개의 제품이 있으면 70ms가 추가됩니다. 궁극적으로 UI를 느리게 만드는 렌더링의 경우 UI가 렌더링 될 때 표시되는 뷰에 로더가 있지만 이번에는 단축하고 싶습니다.

누구든지 도울 수 있습니까?

어떤 도움이라도 대단히 감사하겠습니다.

<UserControl.Resources>
    <converters:ProductQuantityVisibilityConverter x:Key="ProductQuantityVisibilityConverter" />
    <!--<converters:DoubleDigitVisibilityConverter x:Key="DoubleDigitVisibilityConverter" />
    <converters:TripleDigitVisibilityConveter x:Key="TripleDigitVisibilityConveter" />
    <converters:FourDigitVisibilityConverter x:Key="FourDigitVisibilityConverter" />-->

    <Style TargetType="Button"
           BasedOn="{StaticResource ButtonWithNoBorder}"
           x:Name="QuantityButtonStyle">
        <Setter Property="Background"
                Value="White" />
        <Setter Property="HorizontalAlignment"
                Value="Stretch" />
        <Setter Property="HorizontalContentAlignment"
                Value="Left" />
        <Setter Property="Padding"
                Value="2,0" />
        <Setter Property="Foreground"
                Value="{StaticResource CancelButtonForeGround}" />
        <Setter Property="FontFamily"
                Value="Segoe UI Light" />
        <Setter Property="FontWeight"
                Value="Light" />
        <Setter Property="VerticalAlignment"
                Value="Stretch" />
        <Setter Property="VerticalContentAlignment"
                Value="Center" />
    </Style>

</UserControl.Resources>


<Grid Background="White">
    <VisualStateManager.VisualStateGroups>

        <VisualStateGroup>
            <VisualState>
                <VisualState.StateTriggers>
                    <trigger:EqualsStateTrigger Value="{x:Bind ProductDetails.FontSizeSelector, Mode=OneWay}"
                                                EqualTo="1" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="txtQuantity.FontSize"
                            Value="57" />
                </VisualState.Setters>
            </VisualState>
            <VisualState>
                <VisualState.StateTriggers>
                    <trigger:EqualsStateTrigger Value="{x:Bind ProductDetails.FontSizeSelector, Mode=OneWay}"
                                                EqualTo="2" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="txtQuantity.FontSize"
                            Value="47" />
                </VisualState.Setters>
            </VisualState>
            <VisualState>
                <VisualState.StateTriggers>
                    <trigger:EqualsStateTrigger Value="{x:Bind ProductDetails.FontSizeSelector, Mode=OneWay}"
                                                EqualTo="3" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="txtQuantity.FontSize"
                            Value="33" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid>

        <!--#region When Quantity is zero-->
        <Grid x:Name="productWithZeroQuantity" 
              Padding="0">
            <Button x:Name="btnProductImage"
                    HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    Padding="0"
                    Style="{StaticResource ButtonWithNoBorder}"
                    Command="{x:Bind IncreaseQuantityCommand,Mode=OneWay}"
                    CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}"
                    Height="60"
                    Width="120">
                <Button.Background>
                    <ImageBrush Stretch="Fill"
                                ImageSource="{x:Bind ProductDetails.ImageSource, Mode=OneWay}" />
                </Button.Background>
                <Rectangle Width="{Binding ActualWidth, ElementName=btnProductImage}"
                           Height="{Binding ActualHeight, ElementName=btnProductImage}"
                           Margin="0">
                    <Rectangle.Fill>
                        <LinearGradientBrush StartPoint="0,0"
                                             EndPoint="0,1">
                            <GradientStop Offset="0.728"
                                          Color="#50FFFFFF" />
                            <GradientStop Offset="1"
                                          Color="#FFF9F1F1" />
                        </LinearGradientBrush>
                    </Rectangle.Fill>
                </Rectangle>
                <i:Interaction.Behaviors>
                    <ic:EventTriggerBehavior EventName="Holding">
                        <ic:InvokeCommandAction Command="{x:Bind SetQuantityCommand, Mode=OneWay}"
                                                CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}" />
                    </ic:EventTriggerBehavior>
                    <ic:EventTriggerBehavior EventName="RightTapped">
                        <ic:InvokeCommandAction Command="{x:Bind SetQuantityCommand, Mode=OneWay}"
                                                CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}" />
                    </ic:EventTriggerBehavior>
                </i:Interaction.Behaviors>
            </Button>
        </Grid>
        <!--#endregion-->

        <!--#region When quantity is positive-->

        <Grid Padding="0"
              x:Name="ProductWithPositiveQuantity"
              Visibility="{Binding Quantity, Converter={StaticResource ProductQuantityVisibilityConverter}}"
              Grid.Row="1"
              Height="60"
              Width="120">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="2*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Button x:Name="txtQuantity"
                    Style="{StaticResource QuantityButtonStyle}"
                    Command="{x:Bind IncreaseQuantityCommand,Mode=OneWay}"
                    FontSize="57"
                    Content="{x:Bind ProductDetails.Quantity, Mode=OneWay}"
                    CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}">
            </Button>
            <Button Background="{StaticResource LightGray}"
                    Grid.Column="1"
                    Opacity="0.95"
                    VerticalAlignment="Stretch"
                    HorizontalAlignment="Stretch"
                    HorizontalContentAlignment="Center"
                    VerticalContentAlignment="Center"
                    Style="{StaticResource ButtonWithNoBorder}"
                    Command="{x:Bind DecreaseQuantityCommand, Mode=OneWay}"
                    CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}">
                <Image Stretch="None"
                       Source="ms-appx:///Images/HotCategories/MinusIcon.png" />
            </Button>
            <i:Interaction.Behaviors>
                <ic:EventTriggerBehavior EventName="Holding">
                    <ic:InvokeCommandAction Command="{x:Bind SetQuantityCommand, Mode=OneWay}"
                                            CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}" />
                </ic:EventTriggerBehavior>
                <ic:EventTriggerBehavior EventName="RightTapped">
                    <ic:InvokeCommandAction Command="{x:Bind SetQuantityCommand, Mode=OneWay}"
                                            CommandParameter="{x:Bind ProductDetails.StockCode, Mode=OneWay}" />
                </ic:EventTriggerBehavior>
            </i:Interaction.Behaviors>
        </Grid>

        <!--#endregion-->

    </Grid>
    <Border Background="{StaticResource DarkGray}"
            Height="20"
            Width="120"
            Grid.Row="1">
        <TextBlock Text="{x:Bind ProductDetails.Description, Mode=OneWay}"
                   Padding="3,2,2,2"
                   FontSize="12"
                   FontWeight="SemiBold"
                   TextTrimming="CharacterEllipsis"
                   HorizontalAlignment="Left"
                   Foreground="White" />
    </Border>
</Grid>
오늘 Ipsit

나는 각 업데이트에 대해 ObservableCollection을 완전히 업데이트하여 궁극적으로 깜박임을 유발하는 렌더링 시간을 늘렸다는 것을 발견했습니다.

컬렉션에서 값이 변경된 목록 항목 만 업데이트하여 다시 렌더링되는 항목이되도록 코드를 업데이트하여 매번 더 적은 UI가 다시 렌더링되므로 깜박임을 제거했습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

clojurescript 원자의 어떤 변경으로 인해 시약 구성 요소가 다시 렌더링됩니까?

분류에서Dev

setState ()를 사용해도 상태 변경 후 React 구성 요소가 다시 렌더링되지 않습니다.

분류에서Dev

JS의 while 루프로 인해 브라우저 속도가 느려집니다.

분류에서Dev

WHERE 절의 구조로 인해 쿼리 속도가 느려집니다.

분류에서Dev

다시 렌더링 할 때 사용자 정의 후크 상태가 업데이트되지 않음

분류에서Dev

코드의 함수로 인해 속도가 느려 집니까?

분류에서Dev

자식의 소품을 변경하면 React.memo를 사용해도 항상 부모가 다시 렌더링됩니까?

분류에서Dev

무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

분류에서Dev

무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

분류에서Dev

EaselJS : 캐싱으로 인해 렌더링 속도가 느려지는 이유는 무엇입니까?

분류에서Dev

shallowEqual을 사용 함에도 불구하고 useSelector로 인해 다시 렌더링됩니까?

분류에서Dev

useLocalStorage를 사용할 때 로컬 상태가 구성 요소를 다시 렌더링하지 않습니다.

분류에서Dev

사용자가 로그인했음을 반영하도록 상태를 업데이트하는 문제를 해결합니다. 상태가 true로 표시 되더라도 '/ home /으로 이동하면 로그인 페이지로 다시 리디렉션됩니다.

분류에서Dev

각도 지시문으로 인해 템플릿의 나머지 부분이 렌더링되지 않습니다. 가능한 이유는 무엇입니까?

분류에서Dev

상태 변경시 형제 구성 요소가 다시 렌더링되지 않음 (useEffect, useState 및 Context 사용)

분류에서Dev

setState를 사용하지만 상태 값은 그대로 유지되면 React가 다시 렌더링됩니까?

분류에서Dev

ngRoute를 사용한 모듈 종속성으로 인해 각도 렌더링이 중단됨

분류에서Dev

업데이트로 인해 시스템 속도가 느려 집니까?

분류에서Dev

업데이트로 인해 시스템 속도가 느려 집니까?

분류에서Dev

업데이트로 인해 시스템 속도가 느려 집니까?

분류에서Dev

상태가 변경 될 때 SceneKit 장면이 제대로 렌더링되지 않도록하려면 어떻게해야합니까?

분류에서Dev

개체의 속성을 개별적으로 편집하고 각 속성에 대해 동적으로 열려면 "편집"상자가 필요합니다.

분류에서Dev

Highstock gapsize로 인해 라인 렌더링 문제가 발생합니다.

분류에서Dev

Dropbox 업로드로 인해 인터넷 속도가 크게 느려집니다

분류에서Dev

사용자 정의 후크 상태 변경에 반응하지만 다시 렌더링하지 않는 useeffect

분류에서Dev

안드로이드는 사용자의 손가락 흔적을 렌더링

분류에서Dev

관련 컬렉션 필드를 사용하여 조회 및 정렬이 포함 된 MongoDB 집계로 인해 쿼리 속도가 느려집니다.

분류에서Dev

CSS로 <img> 태그를 통해 렌더링하는 svg의 색상을 즉시 변경할 수 있습니까?

분류에서Dev

JSX 태그를 동적으로 렌더링하려고 시도

Related 관련 기사

  1. 1

    clojurescript 원자의 어떤 변경으로 인해 시약 구성 요소가 다시 렌더링됩니까?

  2. 2

    setState ()를 사용해도 상태 변경 후 React 구성 요소가 다시 렌더링되지 않습니다.

  3. 3

    JS의 while 루프로 인해 브라우저 속도가 느려집니다.

  4. 4

    WHERE 절의 구조로 인해 쿼리 속도가 느려집니다.

  5. 5

    다시 렌더링 할 때 사용자 정의 후크 상태가 업데이트되지 않음

  6. 6

    코드의 함수로 인해 속도가 느려 집니까?

  7. 7

    자식의 소품을 변경하면 React.memo를 사용해도 항상 부모가 다시 렌더링됩니까?

  8. 8

    무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

  9. 9

    무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

  10. 10

    EaselJS : 캐싱으로 인해 렌더링 속도가 느려지는 이유는 무엇입니까?

  11. 11

    shallowEqual을 사용 함에도 불구하고 useSelector로 인해 다시 렌더링됩니까?

  12. 12

    useLocalStorage를 사용할 때 로컬 상태가 구성 요소를 다시 렌더링하지 않습니다.

  13. 13

    사용자가 로그인했음을 반영하도록 상태를 업데이트하는 문제를 해결합니다. 상태가 true로 표시 되더라도 '/ home /으로 이동하면 로그인 페이지로 다시 리디렉션됩니다.

  14. 14

    각도 지시문으로 인해 템플릿의 나머지 부분이 렌더링되지 않습니다. 가능한 이유는 무엇입니까?

  15. 15

    상태 변경시 형제 구성 요소가 다시 렌더링되지 않음 (useEffect, useState 및 Context 사용)

  16. 16

    setState를 사용하지만 상태 값은 그대로 유지되면 React가 다시 렌더링됩니까?

  17. 17

    ngRoute를 사용한 모듈 종속성으로 인해 각도 렌더링이 중단됨

  18. 18

    업데이트로 인해 시스템 속도가 느려 집니까?

  19. 19

    업데이트로 인해 시스템 속도가 느려 집니까?

  20. 20

    업데이트로 인해 시스템 속도가 느려 집니까?

  21. 21

    상태가 변경 될 때 SceneKit 장면이 제대로 렌더링되지 않도록하려면 어떻게해야합니까?

  22. 22

    개체의 속성을 개별적으로 편집하고 각 속성에 대해 동적으로 열려면 "편집"상자가 필요합니다.

  23. 23

    Highstock gapsize로 인해 라인 렌더링 문제가 발생합니다.

  24. 24

    Dropbox 업로드로 인해 인터넷 속도가 크게 느려집니다

  25. 25

    사용자 정의 후크 상태 변경에 반응하지만 다시 렌더링하지 않는 useeffect

  26. 26

    안드로이드는 사용자의 손가락 흔적을 렌더링

  27. 27

    관련 컬렉션 필드를 사용하여 조회 및 정렬이 포함 된 MongoDB 집계로 인해 쿼리 속도가 느려집니다.

  28. 28

    CSS로 <img> 태그를 통해 렌더링하는 svg의 색상을 즉시 변경할 수 있습니까?

  29. 29

    JSX 태그를 동적으로 렌더링하려고 시도

뜨겁다태그

보관