Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在UWP中初始化InkCanvas数组时,内存不足,无法继续执行程序_C#_Wpf_Uwp - Fatal编程技术网

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

C# 尝试在UWP中初始化InkCanvas数组时,内存不足,无法继续执行程序,c#,wpf,uwp,C#,Wpf,Uwp,这是我的密码: public sealed partial class MainPage : Page { InkCanvas[] arrInkCanvas = null; public MainPage() { this.InitializeComponent(); int i = 0; arrInkCanvas = new InkCanvas[1000]; try {

这是我的密码:

    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)
        {

        }
    }
}
公共密封部分类主页面:第页
{
InkCanvas[]arrInkCanvas=null;
公共主页()
{
this.InitializeComponent();
int i=0;
arrInkCanvas=新的InkCanvas[1000];
尝试
{
对于(i=0;i<1000;i++)
{                    
arrInkCanvas[i]=新的InkCanvas();
}
}
捕获(例外情况除外)
{
}
}
}
当我在WPF应用程序中运行这段代码时并没有问题,但在UWP中它抛出异常:“内存不足,无法继续执行程序。”

是虫子还是什么有人能告诉我的吗


谢谢。

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

 public MainPage()
 {
     this.InitializeComponent();

     var AppUsageLevel = MemoryManager.AppMemoryUsageLevel;
     var AppMemoryLimit = MemoryManager.AppMemoryUsageLimit;
  }
根据我的测试,你的应用程序确实内存不足。您可以执行一个简单的测试:在for循环中,每次新建InkCanvas()时,您都可以调用MemoryManager.AppMemorySage,并将其与MemoryManager.AppMemorySageLimit进行比较

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

查看它,看起来很相似,这表明限制可能是128。。。这可能是一个“设计上”的限制

如果这是一致的-我没有尝试过-为什么不创建一个InkCanvas池并在InkCanvas不使用时重用它们?除非你同时需要它们。。。 此外,这将提高速度,因为您可以避免重新创建inkcanvas,而只是重复使用它们


到目前为止,代码可以保持一致,当问题/限制得到解决时,您可以扩大池

我想说问题很清楚:试图创建1000个新的
InkCanvas
对象超出了设备的内存。我在我的计算机上运行这个应用程序,当I=128时异常中断,内存消耗为50MB,我认为问题不在于设备的内存。设备的内存是什么?我想你使用的是512mb的虚拟设备,也许这就是问题所在。正在研究…请看Im在本地计算机上运行,加载一堆占用1GB内存的图像时没有问题。