Windows phone 8 Direct3D纹理资源生命周期

Windows phone 8 Direct3D纹理资源生命周期,windows-phone-8,direct3d,Windows Phone 8,Direct3d,我一直在使用Windows Phone上的Direct3D进行一个项目。这只是一个带有2d图形的简单游戏,我利用DirectXTK帮助我玩精灵 最近,我在512mb模拟器上调试时遇到内存不足错误。此错误不常见,是打开、挂起、打开、挂起 追踪它,我发现每次激活应用程序时都会加载纹理,最后会填满允许的内存。为了解决这个问题,我可能会去编辑它,以便只在打开时加载纹理,但从暂停激活;但在这个问题之后,我对纹理资源的正确生命周期管理感到好奇。在搜索过程中,我遇到了自动(或由microsoft“管理”)纹理

我一直在使用Windows Phone上的Direct3D进行一个项目。这只是一个带有2d图形的简单游戏,我利用DirectXTK帮助我玩精灵

最近,我在512mb模拟器上调试时遇到内存不足错误。此错误不常见,是打开、挂起、打开、挂起

追踪它,我发现每次激活应用程序时都会加载纹理,最后会填满允许的内存。为了解决这个问题,我可能会去编辑它,以便只在打开时加载纹理,但从暂停激活;但在这个问题之后,我对纹理资源的正确生命周期管理感到好奇。在搜索过程中,我遇到了自动(或由microsoft“管理”)纹理管理。这可能有助于对视频内存中的纹理进行一些管理

但是,我也想知道其他方法,因为我无法找到一种将托管纹理合并到代码中的好方法


我最好是调用ID3D11ShaderResourceView指针的Release方法,我将其存储在析构函数中,以防止内存被填满,但如何确保纹理在其他应用程序需要使用它(内存)时仍保留在内存中

Windows phone使用Direct3D 11“虚拟化”GPU内存。本质上,每个纹理都是“管理的”。如果您想了解详细说明,请参阅“。您提供的链接是适用于Windows XP XPDM的Direct3D 9 era,而不是任何支持Direct3D 11的平台

听起来关键问题是您的应用程序正在泄漏资源或工作集过大。您应该启用,并首先确保已按预期清理了所有内容。您可能还需要检查是否遵循上启动/恢复的建议。另外,请记住Direct3D 11使用“延迟”d资源的破坏,所以,仅仅因为你在任何地方都调用了释放,并不意味着所有的资源实际上都消失了……要强制完全破坏,你需要使用


对于Windows phone 8.1和Direct3D 11.2,您可以使用特定的修剪功能来减少应用程序的内存占用,但我不认为这是您的问题。

很抱歉最近的评论。当我试图找出问题并搜索自动纹理管理时,该链接正是我最终选择sa的地方我的原则会适用,我的坏。事实上,对于我在必要时开始使用Release之后的问题,我的问题已经解决了。但问题是,每次应用程序激活时(新发布或后台),我都必须加载并发布纹理这对我拙劣的游戏来说是可以的。但我认为更多的重游戏不会这么做,因为考虑到纹理加载可能需要一些时间。我玩的一些重游戏可能会立即出现在前台。抱歉,如果我不能在帖子中说清楚,但我想知道如何更巧妙地管理纹理。我的意思是,当应用程序打开时,纹理加载,当应用程序运行时我可能不需要重新加载纹理(可能仍在内存中)。虚拟化是我的答案吗?