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

Johnnyxy 2006-07-11 09:07:33
编写程序的时候总是感觉消耗的内存太大,不知道什么原因,每次工程里面多添加一个子Form,当把它Show出来之后内存的占用要增加1——2M,而且关闭子窗口后内存占用量不见减少,我百思不得其解,但是在Show之后调用GC.Collect()方法后有一点改进,于是乎我就把GC.Collect()方法放在我程序里进行大量运算之后,因为运算里面使用了比较大的数组。这样虽然内存占用有所改进但是还是觉得不够(和C++比起来差远啦,C++写出来的同样东西占用内存很小)。不知道还有什么方法可以减小内存开销。在频繁调用GC.Collect()时对程序的性能有没有什么影响?还望高手赐教~
...全文
2436 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
  • 打赏
  • 举报
回复
应该没有很大的影响吧,因为我在一个项目里也是,几乎在所有对象使用后都调用了这个方法,但是程序运行起来没什么两样,内存的占用好像是少了一些
内容概要:本文研究了基于粒子群算法的风电-水电(抽水蓄能)联合优化调度问题,旨在通过智能优化算法实现新能源与储能系统的协同调度,提升电力系统运行效率与稳定性。研究采用粒子群优化(PSO)算法对风电和抽水蓄能电站的出力进行联合优化,以最小化系统运行成本、减少弃风弃电、提高可再生能源消纳能力为目标,构建了包含风电出力不确定性、水电站水量平衡、抽水蓄能机组运行约束在内的多目标优化模型,并通过Matlab编程实现算法求解与仿真验证。文中详细探讨了算法参数设置、收敛性分析及优化结果的合理性,展示了该方法在实际电力系统调度中的应用潜力与工程价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源调度、智能优化算法应用的工程技术人员。; 使用场景及目标:①应用于含大规模风电接入的电力系统中,实现风电与抽水蓄能的协调调度;②为电力系统经济调度、可再生能源消纳、储能优化配置等研究提供算法支持与仿真案例;③作为智能优化算法在能源系统中应用的教学与研究参考资料。; 阅读建议:读者应结合Matlab代码与文中模型描述,理解算法实现细节,建议在学习过程中动手调试代码,尝试修改目标函数或约束条件以观察优化结果变化,从而深入掌握粒子群算法在能源调度中的应用方法。

111,128

社区成员

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

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

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