Первый раз, когда я перехожу на страницу панорамы, она слишком долго загружается

Я разрабатываю приложение для Windows Phone 7.1 с панорамной страницей.

На этой странице панорамы есть два элемента панорамы: один с двумя текстовыми блоками, а другой с элементом управления картой bing. И я также установил изображение размером 1,5 МБ в качестве фона управления панорамой.

Это XAML Panorama:

<phone:PhoneApplicationPage 
    x:Class="XxXClass.DemoDetail"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    SupportedOrientations="Portrait"  Orientation="Portrait"
    shell:SystemTray.IsVisible="False" Foreground="{x:Null}" xmlns:my="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps">
    <toolkit:TransitionService.NavigationInTransition>
        <toolkit:NavigationInTransition>
            <toolkit:NavigationInTransition.Backward>
                <toolkit:TurnstileTransition Mode="BackwardIn"/>
            </toolkit:NavigationInTransition.Backward>
            <toolkit:NavigationInTransition.Forward>
                <toolkit:TurnstileTransition Mode="ForwardIn"/>
            </toolkit:NavigationInTransition.Forward>
        </toolkit:NavigationInTransition>
    </toolkit:TransitionService.NavigationInTransition>
    <toolkit:TransitionService.NavigationOutTransition>
        <toolkit:NavigationOutTransition>
            <toolkit:NavigationOutTransition.Backward>
                <toolkit:TurnstileTransition Mode="BackwardOut"/>
            </toolkit:NavigationOutTransition.Backward>
            <toolkit:NavigationOutTransition.Forward>
                <toolkit:TurnstileTransition Mode="ForwardOut"/>
            </toolkit:NavigationOutTransition.Forward>
        </toolkit:NavigationOutTransition>
    </toolkit:TransitionService.NavigationOutTransition>
    <!--LayoutRoot contains the root grid where all other page content is placed-->
    <Grid x:Name="LayoutRoot">
        <controls:Panorama Title="Demonstation Tracker">
            <controls:Panorama.Background>
                <ImageBrush Stretch="Fill" ImageSource="/Images/demonstrationPanorama.png"/>
            </controls:Panorama.Background>

            <!--Panorama item one-->
            <controls:PanoramaItem Header="Details">
                <Grid Background="#73000000" Margin="0,0,0,26">
                    <TextBlock Height="42" Margin="8,8,174,0" TextWrapping="Wrap" Text="XXXX" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
                    <TextBlock Margin="8,54,8,8" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center" Height="413" Width="381" FontSize="{StaticResource PhoneFontSizeMedium}"><Run Text="xxx."/><Run Text=".."/></TextBlock>
                </Grid>
            </controls:PanoramaItem>

            <!--Panorama item two-->
            <controls:PanoramaItem Header="Map">
                <Grid>
                    <my:Map Name="map1" Margin="0,0,0,26" Height="420" Width="420" />
                </Grid>
            </controls:PanoramaItem>
        </controls:Panorama>
    </Grid>

    <!--Panorama-based applications should not show an ApplicationBar-->

</phone:PhoneApplicationPage>

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

Как ускорить загрузку страницы панорамы?


person VansFannel    schedule 27.10.2012    source источник


Ответы (2)


попробуйте прокомментировать управление картой. Я уверен, что проблема с управлением картой. Я всегда делаю инициализацию данных в фоновом потоке. Затем, когда данные будут готовы, сделайте BeginInvoke и перерисуйте пользовательский интерфейс. И, конечно, 1,5 МБ слишком много, уменьшите его.

person Vovich    schedule 28.10.2012
comment
Спасибо за Ваш ответ. Теперь изображение весит 363Кб, а страница панорамы грузится две-три секунды. И, если я прокомментирую управление картой, оно загружается быстрее. - person VansFannel; 29.10.2012
comment
сделать visibility.collapsed по умолчанию для карты, затем получить данные в фоновом потоке, после чего поставить visibility = visible. Не забудьте использовать BeginInvoke. Ore U может просто инициализировать карту для события Pageloaded. - person Vovich; 29.10.2012
comment
Событие Pageloaded не завершается на Windows Phone. - person VansFannel; 29.10.2012
comment
он вызывает Loaded=PhoneApplicationPage_Loaded - person Vovich; 29.10.2012

1,5Мб это слишком много. Во время выполнения изображение будет распаковано и сохранено в памяти. Это быстро во второй раз, потому что это уже в памяти. Если вы ориентируетесь на устройства с 256 МБ оперативной памяти, вам придется уменьшить использование памяти.

Попробуйте это:

  • Используйте сжатый JPEG. Попробуйте минимизировать размер файла.
  • Фоновые изображения должны иметь размер от 480 x 800 пикселей до 1024 x 800 пикселей (ширина x высота), чтобы обеспечить хорошую производительность, минимальное время загрузки и отсутствие масштабирования.
  • Фоновое изображение должно быть ресурсом.
  • Отключить анимацию инструментария
  • Ограничьте PanoramaItems до 4

Из-за удобства использования я бы также подумал о переносе карт Bing на страницу без слайдов.

person Andras Csehi    schedule 27.10.2012
comment
не могли бы вы рассказать, почему создание ресурса фонового изображения лучше, чем содержание? - person ie.; 28.10.2012
comment
Если вы используете Panorama, фон Ресурса будет загружаться сразу по сравнению с Контентом. Это связано с тем, что изображение загружается в память при запуске приложения. Очевидно, это повлияет на время запуска. - person Andras Csehi; 28.10.2012
comment
Теперь изображение весит 363 КБ, и оно все еще слишком долго загружается. Если я удаляю управление картой, она загружается прилично. Если я загружаю карту в событии Panorama_SelectionChanged (когда я перехожу ко второму элементу панорамы, он все еще зависает в интерфейсе на секунду или две. Есть ли что-то похожее на Android AsyncTask, чтобы избежать этой проблемы? - person VansFannel; 28.10.2012