Windows Phone - 避免高资源使用

时间:2013-04-26 09:02:51

标签: c# performance memory-management windows-phone-8

我使用Windows Store-Kit测试我的Windows Phone 8应用程序,但失败了。它说'高资源使用'。我正在使用MVVM-Pattern,这意味着我将View中的Elements与ViewModel属性绑定。

高使用率的示例:我有一个具有ContentControl的MainView。 ContentControl的内容是另一个视图(我们称之为ChildView)。当我单击ChildView中的TextBox时,会弹出InputScope(您可以在其中键入)并且View会上升,因此可以看到TextBox。当View上升时(请注意TextBox位于Pivot中),它开始变为lagg。我不知道为什么,因为我只关注TextBox并且PivotItem上升。我的问题是如何降低资源使用量?如果您需要任何东西,请写下来,我会在这里发布。

MainPage.xaml中

 <Grid>
    <Grid x:Name="LayoutRoot"  HorizontalAlignment="Left">

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <ScrollViewer Name="MyScrollViewer" Height="Auto" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto" HorizontalScrollBarVisibility="{Binding Horizontal}" VerticalScrollBarVisibility="{Binding Vertical}">
            <!--ContentPanel - zusätzliche Inhalte hier platzieren-->
            <StackPanel ScrollViewer.HorizontalScrollBarVisibility="Auto" Grid.Row="2" Opacity="50">
                <ContentControl Content="{Binding MyContent}" Name="MyContentControl" IsTabStop="False" VerticalContentAlignment="Stretch"  HorizontalContentAlignment="Stretch"/>
            </StackPanel>

        </ScrollViewer>
    </Grid>
</Grid>

ChildView.xaml http://textuploader.com/?p=6&id=zMDoD

Store-Kit结果(德语,但我认为很清楚)http://i.imagebanana.com/img/j6z24o9a/Unbenannt.png

这是视图的ViewModel中的属性(在Store-Kit结果中显示)

    private string _anlohnsteuer;
    public string ANLohnsteuer
    {
        get { return _anlohnsteuer; }
        set
        {
            _anlohnsteuer = value;
            RaisePropertyChanged(() => ANLohnsteuer);
        }
    }

2 个答案:

答案 0 :(得分:1)

我不确定,但似乎你试图将可滚动控件放到另一个可滚动控件中。那将是一个坏主意。

Pivots通常会使用大量资源,因此当您处理超过4项(取决于内容)时,我会避免使用它们。

VielGlückmitdeiner App。

答案 1 :(得分:0)

这个人的精彩文章:

http://fiercedesign.wordpress.com/2012/08/14/windows-phone-performance-best-practices/

阅读主题“重绘区域”

如果UI不流畅/流畅,您必须每次都要检查UI正在重绘哪些元素。您可以通过转到App.xaml.cs并启用重绘区域来完成此操作 Application.Current.Host.Settings.EnableRedrawRegions = true;

如果某个区域或元素闪烁,则表示出现问题。尝试添加 CacheMode参数= “BitmapCache”

到您的元素。

我的应用中有很多颜色闪烁。 UI重新绘制,即我的TextBlocks,即使我没有改变它。我所要做的就是改变所有元素(特别是TextBlocks和Grids),如下所示:

该应用程序现在正在流动。

编辑:我有一个MainViewMode初始化了5个其他ViewModel(MainView包含1个ContentControl,根据用户点击的按钮,ContentControl获取一个新视图,View将获得一个新的ViewModel)。由于我在启动时只加载了1个View和1个ViewModel,因此我将其他4个ViewModel的初始化放在BackgroundWorker中 - &gt;应用开始时间大约是7秒,现在只有2个!