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

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

在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

  1. private void buttonGetMemoryMetrics_Click(object sender, RoutedEventArgs e)
  2.         {
  3.            
  4.             long totalBytes = DeviceStatus.DeviceTotalMemory;
  5.             long usageLimit = DeviceStatus.ApplicationMemoryUsageLimit;
  6.             long currentUsage = DeviceStatus.ApplicationCurrentMemoryUsage;
  7.             ulong commitLimit = MemoryManager.ProcessCommittedLimit;
  8.             ulong currentCommit = MemoryManager.ProcessCommittedBytes;
  9.  
  10.             long workingsetLimit = 0;
  11.             object temp;
  12.             if(DeviceExtendedProperties.TryGetValue("ApplicationWorkingSetLimit", out temp))
  13.                 workingsetLimit = (long)temp;
  14.  
  15.  
  16.             textBlockApplicationCurrentMemoryUsage.Text = currentUsage.ToString();
  17.             textBlockApplicationMemoryUsageLimit.Text = usageLimit.ToString();
  18.             textBlockApplicationWorkingSetLimit.Text = workingsetLimit.ToString();
  19.             textBlockBytesCommitLimit.Text = commitLimit.ToString();
  20.             textBlockBytesCommitted.Text = currentCommit.ToString();
  21.             textBlockDeviceTotalMemory.Text = totalBytes.ToString();
  22.            
  23.         }

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

展开查看全部

相关问题