Unity 应用程序内存泄漏 - 如何在不访问源代码或调试目标的情况下分析?

问题描述 投票:0回答:2

这里有点不寻常的设置,

  • 我正在为视频游戏 RUST 创建模组
  • 它使用 HARMONY 将模组加载到服务器代码中
  • 在某些时候我做了一些导致内存泄漏的事情,应用程序的内存在一天内从 10GB 增长到 30GB,有数百名玩家使用它。
  • 模组是用C#写的,但Unity的核心是C++
  • 卸载所有 mod 不会导致 GC 清理使用的内存,即使在手动调用 gc.collect 时也是如此。

我试过连接传统的内存分析器,如 ANTS 和 dotMemory,但它们没有连接——我确信这与没有发布版本或它是一个 Unity 应用程序有关。

我试过附加 Unity 调试器,但它无法识别游戏。

我的选项用完了,有谁知道是否可以要求 GC 转储当前正在跟踪的对象?也许可以使用 Harmony 挂钩到 GC 中的实际内存分配步骤,我可以手动跟踪?

c# unity3d memory-leaks profiler harmony
2个回答
0
投票

Unity 有多个后端。它有一个是 C# 的 Mono,还有一个是 C++ 的 IL2CPP。还发布基于 Unity 的构建,afaiu,无法分析.

既然我们在谈论模组,也许做一些测试看看它是你的模组,还是其他加载的模组,或者它是否发生在你加载多个或特定的模组时,甚至是它们自己加载的模组等等。


0
投票

如果您下载与游戏制作相同的 Unity 版本(您可以在 UnityPlayer.dll 的属性页面中查看它是什么),您可以将 UnityPlayer.dll 从开发版本交换到游戏中,然后使用 Unity 的内存分析工具。也就是说,这只有在游戏使用相对较新版本的 Unity(最近 3-5 年内制作)时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.