菜鸟教程小白 发表于 2022-12-13 02:32:06

ios - Xamarin 中未发布金属纹理


                                            <p><p><em>此文本是经过深入调查和仔细检查后编辑的。</em></p>

<p>我正在 Xamarin 中开发基于 Metal API 的企业(而非游戏)应用程序,但我遇到了一个严重问题:金属纹理在处理后没有释放它的内存,导致大量内存泄漏和应用程序崩溃的原因。</p>

<pre><code>class SomeClass
{
    public void CreateTexture()
    {
      var metalTexture = device.CreateTexture(textureDescriptor);
      metalTexture.Dispose();
    }
}
</code></pre>

<p>您可以在上面看到一个简化的示例,用于演示问题。
纹理的内存在 Dispose() 调用后不会释放,即使纹理是局部变量也是如此。</p>

<p>谁能解释这是怎么回事,以及如何释放纹理的内存?</p>

<p>由于这个问题,Xamarin 中的 Metal Kit 支持似乎完全损坏且无用。我深感震惊:WTF怎么回事?! Xamarin 团队怎么可能制作最初损坏的功能并且多年不解决问题?你们在那里做什么,伙计们? Xamarin 论坛完全死了。目前,这很自豪地称为“Visual Studio for Mac”,但有什么意义呢?该死的代码片段仍然有问题——必须删除自动插入的括号来修复光标。</p>

<p>附言<br/>
这是演示问题的项目的存储库:<br/>
<a href="https://github.com/kav-git/Xamarin-Metal-Issue" rel="noreferrer noopener nofollow">https://github.com/kav-git/Xamarin-Metal-Issue</a> </p>

<ol>
<li>内存使用情况在调试期间记录到 IDE 的输出窗口。 </li>
<li>按 <code>Add texture</code> 按钮将新的 64Mb 纹理添加到集合中。 </li>
<li>按 <code>Dispose textures</code> 按钮清除所有纹理。不会释放内存。 </li>
<li>在处理非纹理对象时,按<code>释放pixelData</code>按钮确保GC正常。 </li>
<li>使用 <code>GC.Collect()</code> 按钮只是为了好玩。</li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>经过几个小时的随机搜索解决方案,幸运的是找到了。</p>

<p>添加调用<br/>
<code>metalTexture.SetPurgeableState(MTLPurgeableState.Empty);</code><br/>
就在处理纹理解决问题之前。</p>

<p>根据回答的数量,我觉得自己是世界上唯一一个使用 Xamarin 和 Metal Kit 的人......</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Xamarin 中未发布金属纹理,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45587374/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45587374/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Xamarin 中未发布金属纹理