c++ 有什么好的方法可以在运行时确定windows phone8.1应用程序允许/可用的内存量?

xqkwcwgp  于 2023-05-19  发布在  Windows
关注(0)|答案(1)|浏览(214)

在MSVS 2015中工作,它是一个c++ Windows Phone 8.1项目。
我临时拼凑了一个可行的方法--我通过分配和释放内存来执行类似二分搜索的操作;如果分配有效,我就增加大小,如果不有效,我就减少大小,等等。然而,重复的分配和释放看起来很笨拙,不优雅,并且可能导致问题,我还不知 prop 体的细节,称之为直觉。
例如,当在512 MB的手机模拟器上测试时,我最终发现我的应用程序实际上只有160 MB左右的空间可以使用。这很好,但是如果不进行测试,我就不知道我可以分配的实际内存量是多少。
我有哪些选项可以找到这个数字(使用可用的API)?

ryoqjall

ryoqjall1#

正如你在App memory limits for Windows Phone 8中看到的,你可以找到一些关于Windows应用程序内存限制的信息。

正如你所看到的一些workaround about memory statistics,你可以在C#中使用下面的一些API

private void buttonGetMemoryMetrics_Click(object sender, RoutedEventArgs e)
        {
            
            long totalBytes = DeviceStatus.DeviceTotalMemory;
            long usageLimit = DeviceStatus.ApplicationMemoryUsageLimit;
            long currentUsage = DeviceStatus.ApplicationCurrentMemoryUsage;
            ulong commitLimit = MemoryManager.ProcessCommittedLimit;
            ulong currentCommit = MemoryManager.ProcessCommittedBytes;
 
            long workingsetLimit = 0;
            object temp;
            if(DeviceExtendedProperties.TryGetValue("ApplicationWorkingSetLimit", out temp))
                workingsetLimit = (long)temp;
 
 
            textBlockApplicationCurrentMemoryUsage.Text = currentUsage.ToString();
            textBlockApplicationMemoryUsageLimit.Text = usageLimit.ToString();
            textBlockApplicationWorkingSetLimit.Text = workingsetLimit.ToString();
            textBlockBytesCommitLimit.Text = commitLimit.ToString();
            textBlockBytesCommitted.Text = currentCommit.ToString();
            textBlockDeviceTotalMemory.Text = totalBytes.ToString();
            
        }

对于C++的用法,你可以看到MemoryManager.AppMemoryUsageLimit。你可以在MemoryManager部分找到一些关于API的有用信息。

相关问题