- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
此文本是在深入调查和双重检查后编辑的。
我正在 Xamarin 中开发基于 Metal API 的企业(非游戏)应用程序,我有一个严重的问题:金属纹理在处理后没有释放它的内存,这会导致大量内存泄漏和应用程序崩溃。
class SomeClass
{
public void CreateTexture()
{
var metalTexture = device.CreateTexture(textureDescriptor);
metalTexture.Dispose();
}
}
您可以在上面看到一个简化的示例,它演示了该问题。调用 Dispose() 后纹理的内存不会释放,即使纹理是局部变量也是如此。
谁能解释一下这是怎么回事,以及如何释放纹理的内存?
由于这个问题,Xamarin 中的 Metal Kit 支持似乎完全损坏且无用。我深深地震惊了:WTF 是怎么回事?! Xamarin 团队怎么可能制作最初损坏的功能并且多年不解决问题?伙计们,你们在那里做什么? Xamarin 论坛完全死了。目前,这个自豪地称为“Visual studio for Mac”,但有什么意义呢?该死的代码片段仍然有问题——必须删除自动插入的括号才能修复光标。
附言
这是展示问题的项目的 repo 协议(protocol):
https://github.com/kav-git/Xamarin-Metal-Issue
添加纹理
按钮将新的 64Mb 纹理添加到集合中。 Dispose textures
按钮清除所有纹理。不会释放内存。 Release pixelData
按钮以确保GC 正常。 GC.Collect()
按钮只是为了好玩。最佳答案
经过数小时的随机搜索解决方案,幸运的是找到了。
添加调用metalTexture.SetPurgeableState(MTLPurgeableState.Empty);
在处理纹理之前解决问题。
根据回答的数量,我觉得自己是世界上唯一一个将 Xamarin 与 Metal Kit 结合使用的人......
关于ios - Xamarin 中未释放金属质感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45587374/
我找不到答案的简单问题,在 openGL 上有一个 glDeleteTextures(1, &t) 显然模型有很大的不同,但我想知道 Metal 是否有相同的需要或要求。 MTLTexture 是通过
是否可以不使用MTLTexture就地处理osx_ReadWriteTextureTier2? 看来我可以将两个纹理参数设置为相同的纹理。这是受支持的行为吗? 具体来说,我不介意写后不更新纹理缓存。我
我正在尝试修改Apple的示例GLPaint(使用OpenGL的绘画应用程序)以使用Metal而不是OpenGL。我可以使用 Metal 将笔触渲染到屏幕上,但在“删除”它时遇到困难。 在 Metal
在尝试优化片段着色器中的 Metal 渲染性能时,我注意到有多种读取纹理的方法,具体取决于场景。我想知道纹理读取方法是否对性能有影响。 这是我尝试过的三种不同的选择: 在没有采样器的情况下使用 tex
我是一名优秀的程序员,十分优秀!