【发布时间】:2012-04-17 05:15:44
【问题描述】:
我目前正在使用 C# 和 SharpDX 为 Windows 8 开发地铁游戏。该项目进展顺利,但最近需要开始追踪内存泄漏,我不确定从哪里开始。
Visual Studio 11 中的内置内存分析器不适用于 Metro 应用程序,WinDBG 似乎无法连接到 Metro 应用程序(除非我使用不正确),而且我很难找到有关在 Metro 的 .NET 4.5 中查看托管分配的任何信息。
有人有这方面的经验吗?有什么好的地方可以开始寻找吗?有没有人成功使用工具来帮助检测 Metro 应用程序中的内存泄漏?
【问题讨论】:
-
我还不会花很多时间在这上面。 WinRT 本身存在将在 RTM 之前修复的内存泄漏的可能性很大。您将花费大量时间来解决临时问题。到时候也应该有工具支持。
-
您最好通过应用程序验证程序运行它。您可以通过商店发布使用 SlimDX 的应用程序的几率应该是 Slim。
-
@HansPassant - 我同意。他可能想验证他甚至可以将它发布到商店,我的理解是,除非 SharpDX 只使用 WinRT 配置文件,否则它被发布的机会微乎其微。查看 SharpDX 的项目页面,他们列出的“功能”会让你相信它通过使用“Metro Style”这个词来支持 WinRT 配置文件,甚至微软自己的产品也只是意味着某种设计风格。当然,截至 2012 年 3 月 30 日,SharpDX 甚至不支持 Windows 8 CP。
-
到目前为止,SharpDX的夜间构建确实在Win8 CP的WACK套件下构建并通过了验证。我知道微软自己的一些 pre-RTM 代码中可能存在内存泄漏,但我真的只是在寻找有关我分配的信息。甚至 System.GC.GetTotalMemory() 对于 Metro 应用程序似乎都不存在。我不想把我的搜索推迟太久,否则我担心我会在 RTM 之后花时间做这件事,这可能会阻碍项目。
-
@BenSmith - 在 Windows 8 RC 发布之前,您将不得不以老式方式进行操作。确定泄漏的位置,确保以正确的方式进行所有操作,并等待 Visual Studio 内存配置文件功能支持 WinRT 配置文件。
标签: c# memory-management windows-8 managed microsoft-metro