2017-10-06 8 views
0

확실히 확인할 수 없지만로드하는 데 시간이 너무 오래 걸리므로 응용 프로그램이 충돌하는 것처럼 보입니다.UWP/Win2D - 캔버스 리소스를로드하는 동안 응용 프로그램이 충돌합니다.

는 나는 내가 크기가 약 4MB의 총, 약 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로 보이지 않습니다. 문제는 너무 많은 데이터를 채우려 고 노력하면서 사전이 폭발하고있는 것 같습니다. 나는 그것을 경험적으로 증명하지는 못했지만 두 개의 별도 사전을 만들어 이미지 절반을 나머지 절반은 두 번째 이미지로 만들고 문제는 해결되었습니다.

전체 목록을 수용하기 위해 사전을 관리하는 더 좋은 방법이있을 수 있지만, 지금은 합당한 해결 방법입니다.

+0

사전에 200 개 항목이 문제가되지 않습니다. 사전을 두 개로 나누고 각각에 100 비트 맵을로드해야한다고 말하는 것입니까? – Laith

+0

예. 이미지를 2 개의 사전으로 나누면 문제가 해결되었습니다. 문제없이 100K + 행을 보유하는 사전이 있습니다. 사전에 저장된 데이터의 크기라고 생각했습니다. 그러나 사전에 문제없이 외부의 모든 이미지를로드하는 중 ... 그래서 왜 하나의 사전을 사용하여 실패할지 전혀 알 수 없습니다. –