Xamarin 中未释放金属质感
Metal texture doesn't released in Xamarin
本文经过深入调查和仔细检查后进行了编辑。
我正在 Xamarin 中开发基于 Metal API 的企业(非游戏)应用程序,我遇到了严重问题:Metal textures 在处理后没有释放它的内存,导致大量内存泄漏和应用程序崩溃。
class SomeClass
{
public void CreateTexture()
{
var metalTexture = device.CreateTexture(textureDescriptor);
metalTexture.Dispose();
}
}
上面你可以看到一个简化的示例,它演示了这个问题。
调用 Dispose() 后纹理的内存不会释放,即使纹理是局部变量也是如此。
谁能解释一下这是怎么回事,以及如何释放纹理的内存?
由于这个问题,Xamarin 中的 Metal Kit 支持似乎已完全损坏且无用。我深深地震惊了:WTF 是怎么回事?! Xamarin 团队怎么可能制作最初损坏的功能并且多年不解决问题?伙计们,你们在那里做什么? Xamarin 论坛完全死了。目前,这被自豪地称为 "Visual studio for Mac",但有什么意义呢?该死的代码片段仍然有问题——必须删除 auto-inserted 括号来修复光标。
P.S.
这是展示问题的项目的回购协议:
https://github.com/kav-git/Xamarin-Metal-Issue
- 内存使用情况在调试期间记录到 IDE 的输出 window 中。
- 按
Add texture
按钮将新的 64Mb 纹理添加到 collection。
- 按
Dispose textures
按钮清除所有纹理。不会释放内存。
- 当你处理完non-textureobjects时,按
Release pixelData
按钮确保GC正常。
- 使用
GC.Collect()
按钮只是为了好玩。
经过几个小时的随机搜索解决方案,幸运的是找到了。
正在添加呼叫
metalTexture.SetPurgeableState(MTLPurgeableState.Empty);
在处理纹理之前解决问题。
根据回答的数量,我觉得自己是世界上唯一一个使用 Xamarin 和 Metal Kit 的人...
本文经过深入调查和仔细检查后进行了编辑。
我正在 Xamarin 中开发基于 Metal API 的企业(非游戏)应用程序,我遇到了严重问题:Metal textures 在处理后没有释放它的内存,导致大量内存泄漏和应用程序崩溃。
class SomeClass
{
public void CreateTexture()
{
var metalTexture = device.CreateTexture(textureDescriptor);
metalTexture.Dispose();
}
}
上面你可以看到一个简化的示例,它演示了这个问题。 调用 Dispose() 后纹理的内存不会释放,即使纹理是局部变量也是如此。
谁能解释一下这是怎么回事,以及如何释放纹理的内存?
由于这个问题,Xamarin 中的 Metal Kit 支持似乎已完全损坏且无用。我深深地震惊了:WTF 是怎么回事?! Xamarin 团队怎么可能制作最初损坏的功能并且多年不解决问题?伙计们,你们在那里做什么? Xamarin 论坛完全死了。目前,这被自豪地称为 "Visual studio for Mac",但有什么意义呢?该死的代码片段仍然有问题——必须删除 auto-inserted 括号来修复光标。
P.S.
这是展示问题的项目的回购协议:
https://github.com/kav-git/Xamarin-Metal-Issue
- 内存使用情况在调试期间记录到 IDE 的输出 window 中。
- 按
Add texture
按钮将新的 64Mb 纹理添加到 collection。 - 按
Dispose textures
按钮清除所有纹理。不会释放内存。 - 当你处理完non-textureobjects时,按
Release pixelData
按钮确保GC正常。 - 使用
GC.Collect()
按钮只是为了好玩。
经过几个小时的随机搜索解决方案,幸运的是找到了。
正在添加呼叫
metalTexture.SetPurgeableState(MTLPurgeableState.Empty);
在处理纹理之前解决问题。
根据回答的数量,我觉得自己是世界上唯一一个使用 Xamarin 和 Metal Kit 的人...