C#中程序员可以不用考虑内存拉圾的处理了吗?

yanfeng 2005-10-31 10:09:36
刚刚从c++转移过来,看到了C#中有个GC(拉圾回收器)可以自动回收拉圾的,好像这个东西自己有很好的回收拉圾内存的策略,不用自己再在析构函数中显示的写回收拉圾的code了,虽然系统也提供了System.GC.Collect()方法来显示要回收内存,但是微软又不提倡用它,说要影响GC的性能。

这个意思是不是C#程序员再也不用考虑内存拉圾问题了?(当然非内存的资源还是要显示的释放:)
...全文
389 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjidong 2005-11-04
  • 打赏
  • 举报
回复
.net说实话俺也搞了好长时间了,现在还是不明不白,俺只是觉得占用资源比较大(想当然)的时候才收工释放。
俺的观点是“虽然办公室里有大姐定时打扫垃圾,如果碰上垃圾太多的时候,也要主动叫她去打扫”。
vovo2000 2005-11-04
  • 打赏
  • 举报
回复
最好不要自己手动释放,手动释放并不比gc性能高。
jeremychen001181 2005-11-04
  • 打赏
  • 举报
回复
前面new了一个没有实现IDispose的对象,要如何在后面手动释放内存?
nate_liu 2005-11-03
  • 打赏
  • 举报
回复
在非拖管代碼中﹐應該在調用后顯式回收好一點的(個人認為)。
比如說你在C#中調用Excel之類的COM,在調用完后﹐應該Null然后GC.Collect()好一點的。否則Excel的進程是要等到窗體關閉后才能關閉甚至更長時間才能關閉的。
lyb_abiandbel 2005-11-03
  • 打赏
  • 举报
回复
我手动家gc.collect()和dispose(),
但是,内存都不会少,
即使用了上面的方法,还是要等gc来回收?
这个地方就是不明不白,用好还是不用好?
用多线程可以解决吗?
Ivony 2005-11-03
  • 打赏
  • 举报
回复
实现了IDispose的对象是必须调用Dispose方法,托管资源可以不管,非托管资源一定要写Dispose和析构函数释放,否则永远不会释放
jijl2001 2005-11-03
  • 打赏
  • 举报
回复
有时候要考虑一下加快垃圾回收
lovebanyi 2005-11-03
  • 打赏
  • 举报
回复
不要考虑.. 不过回收的时候发现程序会停一会儿
fsdy2000 2005-11-03
  • 打赏
  • 举报
回复
内存回收有很多种机制,一种语言只是选择其中一种或几种。不可避免都不可能是完美的。
netdreamingboy 2005-11-02
  • 打赏
  • 举报
回复
to: superfishmanweb
我现在也遇上你同样的问题.请问为啥要"在多处加了GC"?这样做有啥好处,怎么加?每个线程执行完都加呢?环是定时调用呢?望指教!
jamesfay 2005-11-02
  • 打赏
  • 举报
回复
特殊情况下需要考虑,在资源占用很大的时候也会考虑WeakReference什么的
曲滨_銘龘鶽 2005-11-01
  • 打赏
  • 举报
回复
有 Dispose 的类尽量调用 Dispose 就好了
反正 ms 这里根本就是不明不白
我们的服务器(2003)经常出现占用好多内存的情况,就算定时调用 Collect 也不太解决问题,后来多加了几个处理进程好多了
afdfgg 2005-11-01
  • 打赏
  • 举报
回复
非托管资源,继承IDisposable接口,显示调用Dispose方法释放资源,效率应该比较高
superfishmanweb 2005-11-01
  • 打赏
  • 举报
回复
GC好有必要,我写了个多线程的东东,内存种是隔一段时间就爆长,后来在多处加了GC就使内存维持在一个稳定的水平了,不过cpu就出现了波浪型的变化.但总算解决了问题.另外,有很多对象如果是可以设置null的或可以dispose的就尽量把他们设置了,null的会被gc收回而dispose就不用说了.
fsdy2000 2005-10-31
  • 打赏
  • 举报
回复
建议你不用,.net有专门的线程在不断的检测和做回收工作。当然你可以分析一下其使用的回收机制,看是否满足你的要求。再补充一些方法也可以。另外.net底层上是否不会发生内存泄漏还不好说。连JAVA有回收机制,其JVM都有这方面漏洞。
SqlDataAdapter 2005-10-31
  • 打赏
  • 举报
回复
一般大对象用完后就手工释放,小对象就让CLR自动处理吧。
royosun 2005-10-31
  • 打赏
  • 举报
回复
考虑了不是更好??~
DrSmart 2005-10-31
  • 打赏
  • 举报
回复
不过不一样的,你们要知道用结构分配的内存是占用栈内存,而用类分配的是堆内存,搞服务器的人写就知道还是要手动的释放一定的
Yuna_2z 2005-10-31
  • 打赏
  • 举报
回复
差不多了~只要有了CLR,利用GC回收,MS今天在.net frameword programming又看了一边
jxufewbt 2005-10-31
  • 打赏
  • 举报
回复
基本上是的,因为CLR会隔一段时间检测一下内存,如果发现某些资源没在使用状态,就调用GC来释放,Java也是这种机制。
加载更多回复(1)

110,566

社区成员

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

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

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