我应该担心内存泄漏吗?
本文关键字:泄漏 内存 担心 我应该 | 更新日期: 2023-09-27 18:18:59
我刚开始写Windows服务。我决定编写一个通过Twilio进行外呼的程序。当我使用实现IDisposable的资源时,我正在使用using语句。到目前为止,我总共运行了4个小时,下面是我的内存使用情况:
开始:9 k
15 Min: 10k
30 Min: 13k
1小时:13k
2小时:13k
3小时:13k
30分钟后,它似乎是一致的(在13,100和13,200之间),但我不确定为什么在前30分钟后仍在分配资源。OnStart()方法启动4个计时器和一些小对象。制作我的作品肯定不会花30分钟。计时器只是等待一个特定的时间,执行一个查询,然后用Twilio将结果排队,然后等待下一个事件。
在这一点上,我应该关心内存泄漏吗?这样的应用程序正常吗?不,看起来您不需要担心内存泄漏。
在具有几gb可用内存的机器上,13k内存的消耗是…非常小。如果它稳定地增长并且从不减少,那么您有泄漏;否则,您没有问题。
值得记住的是,CLR中的字符串是不变的,因此每次"更改"字符串时,都会创建一个新的副本,并且分配给旧版本的内存被标记为未使用。因此,大多数程序在日常使用中都会消耗一些内存:这是正常的,只有在非常紧循环或大型集合或两者同时存在的边缘条件下才需要关注。
即使这样,. net垃圾收集器(GC)也会不时地清理和巩固这些旧内存。
在某些情况下,字符串(和其他对象)可以分配内存(和其他资源,如文件句柄),这些内存在使用后不会被释放,这就是您需要使用Dispose()
的地方。
有根据的猜测可能是,当您执行HTTP请求等时,框架仍然分配一些东西。
我不会在这一点上担心,但如果你真的想,你总是可以使用CLR分析器或其他。net内存分析器来看看发生了什么,如果它是值得担心的。