【问题标题】:Xamarin CocosSharp 2D CCDrawNode memory leakXamarin CocosSharp 2D CCDrawNode 内存泄漏
【发布时间】:2016-06-26 00:07:17
【问题描述】:

我正在使用 CocosSharp 2D Lolipop 5.1 API22 制作心电图。 我每秒有 332 个小节。 我每秒画一个 6425 条线的多边形 100 次。 我在 82 秒时出现内存不足错误。

            drawNode.DrawPolygon(verts,
            count: verts.Length,
            fillColor: CCColor4B.Transparent,
            borderWidth: 1,
            borderColor: lineColor,
            closePolygon: false);

verts 是一个 6425 CCPoint 数组。

X 增量为 0.1 pt。 y 介于 0 和 4500 之间。

我在 Visual Studio Entreprise 2015 Update 2 下

我使用 Xamarin Android 播放器测试我的应用

我可以在 Visual Studio 中使用什么工具来分析我的问题吗?

我用这个技术阅读了许多关于内存泄漏的问题,但从未在 CCDrawNode 中阅读过。

【问题讨论】:

  • 您的代码是否有可能在 github 上的某个地方可用,以便我们进行调查/贡献?
  • Laurent perso 我面临着一个类似的问题,我想像你一样画一张图表,但在画了几分钟后,一切都变得非常滞后。虽然设置屏幕的线程保持在 10 毫秒以下(更像是 0.1 毫秒)。您是否解决了这个问题,或者您是否转移到了不同​​的图形引擎?

标签: c# android xamarin memory-leaks cocossharp


【解决方案1】:

Xamarin 分析器可用于 VS 企业版和 Xamarin 工作室。 https://www.xamarin.com/profiler

当线条不再出现在屏幕上时,您需要从场景中移除节点,以便垃圾收集器获取它。您不能只隐藏节点。您需要删除它们并确保没有对它们的引用。

更新 - 2021 年 2 月,Cocos 实现中很可能存在错误。不幸的是,这并不重要,因为不再支持这个项目。自此项目开展任何重大活动以来,已有 5 年多时间了。

【讨论】:

  • 我按照您的建议在我的内部添加了一个嵌套的 CCDRawNode。更好的是,内存不足发生在 240 秒。我需要一个命令来确保所有内容都真正从内存中删除。类似 ResetChildren...
  • 您可以将其从场景中移除,但仍保留在内存中。有什么东西还有参考吗?例如它是否包含在列表等 c# 集合中?
  • 其实它并不是直接添加到场景中的,它封装在多个节点里面 Scene->Slots[]->MyChart->Children->DrawNode->DrawableNode 我画线到 DrawableNode
  • 现在我使用 Task 但它不是更好: var tsk = Task.Run(() => { RefreshSlots(); }); tsk.Wait();
  • Task 基本上会在一个线程中运行它。当一个对象被处理时它不会生效。没有看到完整的代码就很难诊断,但听起来有些东西仍然引用了您的旧插槽之一。
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2014-10-01
  • 2018-08-24
相关资源
最近更新 更多