加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:30:26 所属栏目:百科 来源:网络整理
导读:我有一个C#应用程序,包含一个带有多个数据透视表的Pivot.正常的数据透视表正确卸载并且不会泄漏内存.在其中的两个项目中,我有Drawingsurfaces,我使用Monogame来渲染3d模型.在卸载和装载他们的枢轴时,我试图完全破坏,然后完全重新创建“游戏”实例(主要是因为
我有一个C#应用程序,包含一个带有多个数据透视表的Pivot.正常的数据透视表正确卸载并且不会泄漏内存.在其中的两个项目中,我有Drawingsurfaces,我使用Monogame来渲染3d模型.在卸载和装载他们的枢轴时,我试图完全破坏,然后完全重新创建“游戏”实例(主要是因为Monogame不允许你现在绘制到两个表面,因为他们使用了大量的内存,并且对他们两个来说都不够).

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

任何Monogame特定方式也将受到赞赏.目前我首先处理我的顶点和索引缓冲区,然后我清除了我的顶点和索引列表,然后我处理了我的Basiceffect和我的Graphicsdevicemanager,然后我在“游戏”本身上调用dispose,最后我创建了变量包含等于null的“游戏”.

PS.如果您曾在XNA中完成此操作,那么您也可以帮助我,因为语法基本相同.

编辑(可能是MonoGame bug):

我现在已经设法正确清理所有缓冲区等.但是我的BasicEffect仍然存在内存泄漏.我已经尝试将其处理并使其为null,但不管它每次重新加载我的轴时它只是继续使用越来越多的内存.

解决方法

使用垃圾收集器并等待完成它.
GC.Collect();
            GC.WaitForPendingFinalizers();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读