请教,调用 GC.Collect() 引起内存占用上涨问题

JDD1997 2020-03-03 01:26:22
为演示极端情况,以下省去无关代码,仅保留三行


while (true)
{
GC.Collect();
}


通过resharper的内存分析,发现非托管内存持续上涨



请教,其原因为何?
...全文
792 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
.Steve 2020-05-30
  • 打赏
  • 举报
回复
GC.collector() 是等待程序有运行间隔才会开始收集垃圾,你一直whlie 他就找不到空隙来收集,而且因为一直跳用到时内存上涨。。。

中间thread.sleep一下看看
ying1234 2020-05-30
  • 打赏
  • 举报
回复
while (true) { GC.Collect(); } 即使里不是 GC.Collect();你这个程序所在的服务器也不够你这样玩的,cpu50%左右是跑不了了。再开一个这样的程序,服务器立马完蛋。
大然然 2020-05-26
  • 打赏
  • 举报
回复
你sleep(1) ,试一下
ITFU 2020-05-26
  • 打赏
  • 举报
回复
引用 4 楼 JDD1997 的回复:
[quote=引用 1 楼 正怒月神 的回复:]
因为 while (true)。。。。


但是如果while (true)里面没东西, 内存是不会一直上涨的, 所以问题还是在GC.Collect()[/quote]那你去掉While(true),只保留GC.Collect(),看看还一直上涨么
大然然 2020-03-19
  • 打赏
  • 举报
回复
你即便是 while(true) { int i = 0 ;} 也是一样的效果,
正怒月神 2020-03-04
  • 打赏
  • 举报
回复
引用 4 楼 JDD1997 的回复:
[quote=引用 1 楼 正怒月神 的回复:] 因为 while (true)。。。。
但是如果while (true)里面没东西, 内存是不会一直上涨的, 所以问题还是在GC.Collect()[/quote] gc回收,也有消耗啊。
palhotel 2020-03-04
  • 打赏
  • 举报
回复
非托管内存那就不是.net 堆中的,GC是不会把它减少的。GC也是需要时间的,你循环调用,一个没执行完就执行下一个,运行时总要执行一些代码,比如创建线程、进程之类的去执行GC吧,所以一直上升。如果你加个Sleep,每次都执行完了,再执行下一个,估计就不会增长了。
Cryking 2020-03-03
  • 打赏
  • 举报
回复
起码也得sleep几秒,让cpu切换下线程干活呀
JDD1997 2020-03-03
  • 打赏
  • 举报
回复
引用 5 楼 楠小南 的回复:
死循环里面收垃圾 ,宇宙计算机都不够你玩
能说说具体原因吗?
楠小南 2020-03-03
  • 打赏
  • 举报
回复
死循环里面收垃圾 ,宇宙计算机都不够你玩
JDD1997 2020-03-03
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
因为 while (true)。。。。
但是如果while (true)里面没东西, 内存是不会一直上涨的, 所以问题还是在GC.Collect()
JDD1997 2020-03-03
  • 打赏
  • 举报
回复
引用 2 楼 ITFU 的回复:
为啥一致让它收集垃圾
实际上当然不可能这么做, 这就是个为了引发这个问题的专门写的极端代码
ITFU 2020-03-03
  • 打赏
  • 举报
回复
为啥一致让它收集垃圾
正怒月神 2020-03-03
  • 打赏
  • 举报
回复
因为 while (true)。。。。

110,539

社区成员

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

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

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