c# - 尝试在 UWP 中初始化 InkCanvas 数组时内存不足,无法继续执行程序

标签 c# wpf uwp

这是我的代码:

    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 中它会抛出异常:“内存不足,无法继续执行程序。”

这是错误还是有人可以告诉我什么?

谢谢。

最佳答案

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

 public MainPage()
 {
     this.InitializeComponent();

     var AppUsageLevel = MemoryManager.AppMemoryUsageLevel;
     var AppMemoryLimit = MemoryManager.AppMemoryUsageLimit;
  }

根据我的测试,您的应用程序确实耗尽了内存。您可以做一个简单的测试:在每次new InkCanvas()的for循环中,您可以调用MemoryManager.AppMemoryUsage并将其与MemoryManager.AppMemoryUsageLimit进行比较。 p>

您是否有任何以这种方式创建 UIElment 的具体原因? Win10 1.586 确实提供了一个新的 API TrySetAppMemoryUsageLimit 来设置应用程序的内存限制。然而,根据内部讨论,该API目前仅适用于非常有限的场景,例如移动设备上的VOIP应用程序。而且该 API 的示例代码和文档还没有准备好。

关于c# - 尝试在 UWP 中初始化 InkCanvas 数组时内存不足,无法继续执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253487/

相关文章:

wpf - 事件触发器中的条件

c# - 从 UWP XAML 中的 HyperlinkBut​​ton 中删除下划线

c# - 如何使用单击处理程序和命令在 WPF MVVM 中打开另一个 View ? (我的解决方案合理吗?)

c# - 删除字符串中最后一次出现的字符串

c# - 通过数据仓库以编程方式检索 TFS "instrumented binaries"的路径信息

c# - 如何以编程方式将 UWP 应用程序从后台(最小化模式)带到前台?

mvvm - 如何使用 MVVM 为社区工具包 RadialGauge 制作动画?

c# - 选择性忽略 NUnit 测试

c# - Dispatcher.Invoke() 不适用于该应用程序

c# - 如何在 WPF UserControl 中显示动态区域性格式化数字