【问题标题】:UWP/Win2D - application crashes while loading canvas resourcesUWP/Win2D - 加载画布资源时应用程序崩溃
【发布时间】:2017-10-08 00:21:15
【问题描述】:

我无法确定这一点,但我的应用程序似乎正在崩溃,因为加载资源的时间过长。

我相信它来自我对 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.
    }

我正在加载大约 200 个位图,总大小约为 4MB。

有其他人经历过吗?如果是这样,您是否想出了解决方法?

我发现一些文章提供了在运行时加载所需资源的建议,但它们似乎不适合我遇到的问题。

【问题讨论】:

  • CreateCanvasResourcesAsync(...) 的实现是什么样的?
  • 我更新了描述以包含有关 CreateCanvasResourceAnsync(...) 调用的方法的信息。
  • 是否可以从外部加载位图,然后将它们传递给视图?为了验证图像本身没有问题,我将它们从外部加载到视图中而没有问题。如果有办法将图像注入到视图中,那将是一个很好的解决方法。
  • 快速提问,您是说 4MB 的 JPEG/PNG 数据吗?因为一旦将 JPEG 或 PNG 加载到位图中,它就会被解压缩。预计内存使用量将远高于 4MB。
  • 是的,字典中有大约 4MB 的 JPG/PNG 数据。我不知道有 PNG 解压缩。

标签: uwp win2d


【解决方案1】:

问题似乎根本不是 Win2D。问题似乎是字典因试图填充太多数据而爆炸。我还没有凭经验证明这一点,但我创建了两个单独的字典,将一半图像放在一个中,另一半放在第二个中 - 问题就解决了。

可能有更好的方法来管理字典以容纳完整列表,但目前这是一个合理的解决方法。

【讨论】:

  • 字典中的 200 个项目不是问题。你是说你必须把你的字典一分为二,每一个加载 100 个位图?
  • 是的。将图像拆分为 2 个字典解决了该问题。我的字典可以容纳 100K+ 行而没有问题。我在想这是存储在字典中的数据的大小。但是,我在外部加载所有图像的字典没有问题......所以我不知道为什么使用单个字典会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多