.net framework4.0 GC问题

flashbrother 2011-04-07 09:48:54
最近写歌程序按照X64编译,放到WIN7 64bit系统下运行,发现内存涨的厉害,仔细检查,查出一处问题就是graphics对象不会自动释放,需要我手动dispose掉,但是同样的程序在WIN XP下就没有这个问题,现在程序做动作,在WIN7下内存还是会涨。
我的程序使用的是.NET FRAMEWORK 4.0,用3.0编译后,在WIN7下就没有问题,
想问一下,.NET 4.0的垃圾回收机制改变了吗?我的程序问题最有可能出在哪里?
...全文
304 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
gc启动频率如何不是你的内存决定,而是策略引擎根据代龄情况决定的,64#、server os、gc回收模式等都会影响这个因素;
Dispose()并不会立即启动gc,它只会释放非托管资源;
你在程序中,调用System.GC.Collect();如果调用后你的内存释放了,就说明没问题,相反就要关注你的程序是否有资源使用不合理的地方了
SecretGarden 2011-04-21
  • 打赏
  • 举报
回复
有人认为 Dispose 是笨方法?所有实现了 Disposable 接口的对象必须显式的调用 Dispose 方法,除非你的程序永远只有你自己用。所以楼主毫无疑问应该修改你的程序显式释放所有资源,绝对不应该让你的程序依赖于 CLR 的垃圾收集器的工作方式。

GC.Collect 倒是一般不必显式调用,除非要使用了极大的临时内存之后。
xqqkl 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kingdom_0 的回复:]
手动GC
[/Quote]
我以为你想说OGC或者OBC
  • 打赏
  • 举报
回复
1:手动GC一般没有必要;
2:一个类型如果继承了IDisposable接口,那么它一定要手动Dispose。

参考:C#中标准Dispose模式的实现,http://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html
kingdom_0 2011-04-15
  • 打赏
  • 举报
回复
手动GC
isjoe 2011-04-13
  • 打赏
  • 举报
回复
第一GC的释放时机连微软都不能确定

第二使用using(){}创建对象,确保不使用的时候自动释放,不能用using的,自己可以从IDisopse接口继承处理
None465465535 2011-04-11
  • 打赏
  • 举报
回复
只有1个对象没有任何引用的时候,GC才会施放
hhddzz 2011-04-11
  • 打赏
  • 举报
回复
那个,Graphics不是一直都要手动释放的吗
flashbrother 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]

手动dispose
手动GC
[/Quote]
可是现在的问题时,我都不知道哪个东西它没释放
在XP下,程序最小化,内存会立刻释放降到很小
但是在WIN7下,最小化程序,内存没有释放
段传涛 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]
手动dispose
手动GC
[/Quote]

hehe 虽然是笨方法。 还是顶吧。
可以去微软官网下载 4.o 新特性的视频和代码
子夜__ 2011-04-07
  • 打赏
  • 举报
回复
手动dispose
手动GC
FengYuanMSFT 2011-04-07
  • 打赏
  • 举报
回复
64 位内存大,GC Policy 不一样。可以用 add memory pressure.

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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