此文本经过长时间调查和双重检查后编辑。
我正在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",但重点是什么?该死的代码片段仍然是错误的 - 必须删除自动插入的括号来修复光标。
P.S。
以下是该项目的回购展示了问题:
https://github.com/kav-git/Xamarin-Metal-Issue
Add texture
按钮将新的64Mb纹理添加到集合中。 Dispose textures
按钮清除所有纹理。不会释放任何记忆。 Release pixelData
按钮,确保处理非纹理对象时GC正常。 GC.Collect()
按钮只是为了好玩。