2017-10-06 22 views
0

確かに確認できませんが、読み込みに時間がかかりすぎてアプリケーションがクラッシュしているように見えます。UWP/Win2D - キャンバスリソースの読み込み中にアプリケーションがクラッシュする

は、私はそれが私のサイズがおよそ4メガバイト、合計約200ビットマップをロードしていますCreateCanvasResourcesAsync

public void OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args) 
    { 
     args.TrackAsyncAction(CreateCanvasResourcesAsync(sender).AsAsyncAction()); 
    } 

    private async Task CreateCanvasResourcesAsync(CanvasControl sender) 
    { 
     if (_tiles.Keys.Count > 0) return; 
     await LoadImageAssets(sender, _tiles); 
    } 

    private async Task LoadImageAssets(CanvasControl canvas, IDictionary<int, CanvasBitmap> dictionary) 
    { 
     dictionary.Add((int)TileTypes.Tile1, await CanvasBitmap.LoadAsync(canvas, @"Assets/Tiles/Tile1.png")); 
     dictionary.Add((int)TileTypes.Tile2, await CanvasBitmap.LoadAsync(canvas, @"Assets/Tiles/Tile2.png")); 
    // etc. 
    } 

に私の呼び出しから来ると信じています。

これを体験した他の人はいますか?もしそうなら、あなたは回避策を考え出しましたか?

私は、実行時に必要なリソースを読み込む際に提案を提供する記事をいくつか見つけましたが、問題は私にはあてはまらないようです。

+0

'CreateCanvasResourcesAsync(...) 'の実装はどのように見えますか? – Laith

+0

私はCreateCanvasResourceAnsync(...)によって呼び出されているメソッドに関する情報を含むように説明を更新しました。 –

+0

ビットマップを外部からロードしてビューに渡すことはできますか?画像そのものに問題がないことを確認するために、問題なくビューの外部にロードしました。ビューにイメージを挿入する方法がある場合は、適切な回避策になります。 –

答えて

0

問題はWin2Dのようではありません。問題は、あまりにも多くのデータを埋めることから辞書が爆発しているようだ。私は経験的にそれを証明していませんが、2つの別々の辞書を作成し、イメージの半分をもう一方の半分に置き、問題を解決しました。

完全なリストに対応するために辞書を管理する方がよいでしょうが、これは今のところ妥当な回避策です。

+0

ディクショナリ内の200項目は問題ではありません。辞書を2つに分割し、それぞれに100のビットマップを読み込まなければならないと言っていますか? – Laith

+0

はい。画像を2つの辞書に分割することで問題は解決しました。私は問題なく100K +の行を保持する辞書を持っています。私はそれが辞書に格納されているデータのサイズだと思っていました。しかし、すべての画像を問題なく外部に読み込んでいたので、なぜ1つの辞書を使用して失敗するのか分かりません。 –

関連する問題