频繁调用GC.Collect()会对程序性能有影响么?

Johnnyxy 2006-07-11 09:07:33
编写程序的时候总是感觉消耗的内存太大,不知道什么原因,每次工程里面多添加一个子Form,当把它Show出来之后内存的占用要增加1——2M,而且关闭子窗口后内存占用量不见减少,我百思不得其解,但是在Show之后调用GC.Collect()方法后有一点改进,于是乎我就把GC.Collect()方法放在我程序里进行大量运算之后,因为运算里面使用了比较大的数组。这样虽然内存占用有所改进但是还是觉得不够(和C++比起来差远啦,C++写出来的同样东西占用内存很小)。不知道还有什么方法可以减小内存开销。在频繁调用GC.Collect()时对程序的性能有没有什么影响?还望高手赐教~
...全文
2006 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jijl2001 2006-07-11
  • 打赏
  • 举报
回复
显式执行GC.Collect()有可能给内存回收增加负担,而且不一定能真正回收内存

前面已经述及,垃圾回收周期是不确定的,由垃圾回收器引擎自动计算最佳的垃圾回收时间。在一个需要大量消耗内存的应用程序中,如果在某个确定的时间点上已经明确占用的内存不再需要,及时释放这些内存对提高应用程序的性能有显著的影响,这时就可以强制垃圾回收器执行回收周期。

GC.Collect方法强制垃圾回收器执行垃圾回收周期。在应用程序中调用GC.Collect方法可以强制垃圾回收,及时释放不再需要的大量内存。但是过于频繁的调用GC.Collect方法同样也会带来应用程序的性能问题。因为,开始执行垃圾回收线程时,垃圾回收器将挂起当前正在执行的所有线程,直到垃圾回收线程结束;另一方面,频繁的调用GC.Collect方法还将削弱垃圾回收器引擎的优化作用。而在通常情况下,垃圾回收器往往可以确定最佳的垃圾回收时间。那种认为你比垃圾回收器聪明的想法是错误的,多数情况下强制垃圾回收并不比自动垃圾回收具有更好的性能。

xao7n 2006-07-11
  • 打赏
  • 举报
回复
建议优化代码,反对调用GC.Collect()
wlovenet 2006-07-11
  • 打赏
  • 举报
回复
冒关系
张赐 2006-07-11
  • 打赏
  • 举报
回复
应该没有很大的影响吧,因为我在一个项目里也是,几乎在所有对象使用后都调用了这个方法,但是程序运行起来没什么两样,内存的占用好像是少了一些

110,567

社区成员

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

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

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