gpt4 book ai didi

C# 如何从内存中完全删除对象

转载 作者:太空狗 更新时间:2023-10-29 21:22:54 27 4
gpt4 key购买 nike

我有一个 C# 应用程序,其中包含一个具有多个 Pivotitem 的 Pivot。正常的 Pivotitems 可以正确卸载并且不会泄漏内存。不过,在其中两个项目上,我有 Drawingsurfaces,我在上面使用 Monogame 来渲染 3d 模型。在卸载和加载它们的枢轴时,我试图完全破坏然后完全重新创建“游戏”实例(主要是因为 Monogame 目前不允许您绘制到两个表面,并且因为它们使用大量内存并且有对他们两个来说都不够)。

我的问题在于,当我处理加载时创建的 Xamlgame 时,它​​不会释放它使用的所有内存。这意味着每次我重新创建 Xamlgame 时,它​​都会开始使用越来越多的内存,直到用完为止。因此,我想知道是否有任何 C# 方法可以完全处理加载对象时使用的所有内存。

任何 Monogame 特定方式也将不胜感激。目前我首先处理我的顶点和索引缓冲区,然后我清除我的顶点和索引列表,然后我处理我的 Baseiffect 和我的 Graphicsdevicemanager,然后我在“游戏”本身上调用 dispose 最后我使变量包含等于 null 的“游戏”。

附言。如果您曾在 XNA 中做过此操作,那么您也可以帮助我,因为语法基本相同。

编辑(可能是 MonoGame 错误):

我现在已经设法正确清理所有缓冲区等。但是我的 BasicEffect 仍然存在内存泄漏。我已经尝试处理它并将其设为 null 但无论如何,每次我重新加载我的数据透视表时它都会继续使用越来越多的内存。

最佳答案

首先,您需要将该值设置为 null,这样它就不再被使用:

 XamlGame = null

然后你可以激活垃圾收集器:

 GC.Collect();
GC.WaitForPendingFinalizers();

如果它没有释放,则说明 XamlGame 对象不为 null,或者对它的引用仍由另一个对象持有。

请记住,如果 XamlGame 继承自 Game 类,您将无法处置它,因为它包含使整个游戏应用程序保持事件状态的运行执行循环。如果您处置它,应用程序将崩溃并终止。

关于C# 如何从内存中完全删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com