2

リストに追加する項目のタイプを定義するデータ テンプレートがある longlistselector があります。データ テンプレートには、ソースがパスに動的にバインドされる Image コントロールがあるため、リスト内の各項目には関連付けられた Image コントロールがあります。私が直面している問題は、これらの Image コントロールが占有しているメモリを決して解放せず、メモリ不足の例外が発生することです。通常のシナリオでは、 bitmapImage.UriSource=null を設定して、ビットマップに関連付けられたメモリの割り当てを解除しますが、このシナリオではそうする方法が見つかりません。longlistselector の xaml コードとそれに関連付けられているデータ テンプレートを次に示します。

データ テンプレート

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="MediaItemTemplate">      
        <Canvas VerticalAlignment="Top">
            <Border BorderBrush="#FF4791CA" BorderThickness="3">
                <Image Height="100" Width="100" VerticalAlignment="Top" Grid.RowSpan="2" Stretch="UniformToFill">
                    <Image.Source> 
                          <BitmapImage UriSource="{Binding path}" CreateOptions="BackgroundCreation"  DecodePixelHeight="50" DecodePixelWidth="50"/>
                    </Image.Source>
                </Image>
             </Border>
             <Image Source="/Icons/check.png" Height="16" Width="16" Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" Margin="80,7,7,0" Canvas.ZIndex="100" OpacityMask="Black" Visibility="{Binding visibility}" Name="checkImage" >    
             </Image>
          </Canvas> 
      </DataTemplate>
</phone:PhoneApplicationPage.Resources>

ロングリストセレクター

<phone:LongListSelector 
            Tap="ListMedia_Tap"
            x:Name="ListMedia"
            HorizontalAlignment="Left"
            Height="624" 
            VerticalAlignment="Top"
            Width="436"

背景="透明"

ItemTemplate="{StaticResource MediaItemTemplate}" LayoutMode="Grid" GridCellSize="120,120"/>

私は Windows Phone プログラミングに非常に慣れていません。基本的にやりたいことは、一種の画像ブラウザー エクスペリエンスを開発することです。メモリの割り当てを解除する方法を教えてください。私が完全に間違っている場合は、私を修正するか、同じ機能を実現するためのより良い方法を提案してください。事前にサンクス...

4

3 に答える 3

0

既定では、Windows Phone は、Uri からダウンロードしたメッセージをメモリに保存して、再度読み込む必要がないようにします。(これはキャッシングの大まかな形式です。)

これらのイメージで使用されているメモリを解放するには、それらへのすべての参照を明示的に解放する必要がありました。詳細については、MSDN: Windows Phone 7のイメージに関するヒントを参照してください。

于 2013-07-10T13:38:44.077 に答える
0

(Loaded を使用せずに) コードをスクロールすると、下にスクロールしてリストの一番上に戻った後に画像が失われます (速度は関係ありません)。Loaded を使用している間は、スクロールしても問題ありません。下にスクロールして一番上に戻ることができます (デバッガーは、Unloaded と Loaded が呼び出されたことを示します)。画像はそこにあります。ただし、別のページ(マスター/詳細ページがあります)に移動すると、それらが混同されます。

于 2013-09-20T10:46:44.447 に答える