关于C#的内存~

feng_v_yun 2011-07-05 10:02:39
原来是做C++开发的,现在做C#碰到个内存问题:

比如游戏一个关卡分若干场景的,
由第一个场景到第二个场景的时候,比如游戏流程不会由第二个场景回到第一个场景(游戏可以这么设计,比如第一个场景是一个桥头,到第二个场景的时候,桥发生了坍塌,那么逻辑上玩家就不能回到第一个场景,我们就可以释放第一个场景的内存),那么在从第一个场景到第二个场景的时候就可以释放第一个场景的内存,加载第二个场景的资源到内存。

而在第二个场景到第三个场景的时候,第三个场景是可以回到第二个场景的,这个时候我们不能释放第二个场景的内存,同时还需要加载第三个场景的资源到内存。

所以在上面举的例子中,如果是C++,那么我可以控制何时需要加载内存,何时需要分配内存。

也就是说C++的内存管理比较灵活,我完全可以自己去管理。到了C#,我可以这么做吗?

如果完全不去理会内存释放。那么比如第一个场景内存加载后,再加载第二个第三个场景的话内存不够,C#会那么智能的去释放第一个场景的内存,而不是第二个??
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-07-05
  • 打赏
  • 举报
回复
像有图片这样的资源,需要手动释放,比如:Image.Dispose() 所以抽象的场景类也应该实现 IDisposable
然后手动调用 场景.Dispose()
自由建客 2011-07-05
  • 打赏
  • 举报
回复
我也问过但没几个人理解,或许是我问法有误。
看这个
http://msdn.microsoft.com/zh-cn/library/system.appdomain%28v=vs.80%29.aspx
yuandonghuia 2011-07-05
  • 打赏
  • 举报
回复
用C#做了,这些就交给GC吧。内存都不够的情况。。。还是C++吧。
Relict 2011-07-05
  • 打赏
  • 举报
回复
技术 还没到那么深
学习中、、。。
mengpanfei 2011-07-05
  • 打赏
  • 举报
回复
这种事情~~即使调用GC也不会立即释放内容。CLR在内存紧张的时候,会自动释放该释放的内容。既然用了C#,就放弃C++的那种管理内存思路吧
Lay 2011-07-05
  • 打赏
  • 举报
回复
学习了
criedshy 2011-07-05
  • 打赏
  • 举报
回复
既使你调用了Dispose()你也不知道到底什么时候释放内存

除非 你强制GC

你可以写非托管代码去手工管理内存



xuexiaodong2009 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fangxinggood 的回复:]

像有图片这样的资源,需要手动释放,比如:Image.Dispose() 所以抽象的场景类也应该实现 IDisposable
然后手动调用 场景.Dispose()
[/Quote]同意

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧