尝试在UWP中初始化InkCanvas数组时,内存不足以继续执行程序

这是我的代码:

public sealed partial class MainPage : Page { InkCanvas[] arrInkCanvas = null; public MainPage() { this.InitializeComponent(); int i = 0; arrInkCanvas = new InkCanvas[1000]; try { for (i = 0; i < 1000; i++) { arrInkCanvas[i] = new InkCanvas(); } } catch (Exception ex) { } } } 

当我在WPF应用程序中运行此代码时没有问题,但在UWP中它抛出exception:“内存不足以继续执行程序。”

它是错误还是有人可以告诉我的东西?

谢谢。

Windows操作系统将根据RAM和OS配置平衡位于应用程序的内存。 您可以通过以下方式检查MemoryManager的应用程序内存配置(就像cFrozenDeath所说):

  public MainPage() { this.InitializeComponent(); var AppUsageLevel = MemoryManager.AppMemoryUsageLevel; var AppMemoryLimit = MemoryManager.AppMemoryUsageLimit; } 

从我的测试来看,你的应用程序内存不足。 您可以进行简单的测试:在每次使用新的InkCanvas()时 ,在for循环中,您可以调用MemoryManager.AppMemoryUsage并将其与MemoryManager.AppMemoryUsageLimit进行比较。

如果你有任何具体的理由以这种方式创建UIElment,你能告诉我吗? Win10 1.586确实提供了一个新的API TrySetAppMemoryUsageLimit来设置应用程序的内存限制。 但是,根据内部讨论,此API仅适用于非常有限的情况,例如移动设备上的VOIP应用程序。 此API的示例代码和文档尚未准备就绪。

看一下, 还有另外一个看起来很相似的post ,这表明限制可能是128 ……这可能是“按设计”的限制

如果这是一致的 – 我还没有尝试过 – 为什么不创建InkCanvas池并在不使用InkCanvas时重新使用它? 除非你同时需要它们…同样会增加速度,因为你会避免重新创建inkcanvas并重新使用它们。

到目前为止,代码可以保持一致,并且可以在问题/限制得到修复时扩大池。