C# 我应该担心内存泄漏吗?

C# 我应该担心内存泄漏吗?,c#,memory,memory-leaks,windows-services,memory-management,C#,Memory,Memory Leaks,Windows Services,Memory Management,我不熟悉编写Windows服务。我决定写一个通过Twilio进行出站呼叫的程序。当我使用一个实现IDisposable的资源时,我正在使用using语句。到目前为止,我总共运行了四个小时的服务,下面是我的内存使用情况: 起点:9k 15分钟:10公里 30分钟:13k 1小时:13k 2小时:13k 3小时:13k 30分钟后,这似乎是一致的(在13100和13200之间),但我不确定为什么在前30分钟后仍在分配资源。OnStart()方法启动4个计时器和一些小对象。构建我的对象当然不需要30分

我不熟悉编写Windows服务。我决定写一个通过Twilio进行出站呼叫的程序。当我使用一个实现IDisposable的资源时,我正在使用using语句。到目前为止,我总共运行了四个小时的服务,下面是我的内存使用情况:

起点:9k

15分钟:10公里

30分钟:13k

1小时:13k

2小时:13k

3小时:13k

30分钟后,这似乎是一致的(在13100和13200之间),但我不确定为什么在前30分钟后仍在分配资源。OnStart()方法启动4个计时器和一些小对象。构建我的对象当然不需要30分钟。计时器只是等待一个特定的时间,执行一个查询,然后用Twilio将结果排队,然后等待下一个事件


此时我是否应该担心内存泄漏?对于这样的应用程序,这正常吗?

一个有根据的猜测可能是,当您执行HTTP请求等操作时,框架仍然会分配一些东西


在这一点上我不会担心,但是如果您真的想,您可以随时使用或另一个.NET内存分析器来查看正在发生的事情以及是否需要担心。

不,看起来您不需要担心内存泄漏

在一台有几GB可用内存的机器上,13k内存的消耗是。。。非常小。如果它稳定地增长,并且从不减少,那么你就有一个漏洞:否则,你就没事了


值得记住的是,CLR中的字符串是不变的,因此每次“更改”字符串时,都会创建一个新副本,并且分配给旧版本的内存被标记为未使用。因此,大多数程序只是在日常使用中使用一点内存:这是正常的,只是在边缘条件下需要关注的事情,例如非常紧密的循环或巨大的集合或两者兼而有之

即使如此,.NET垃圾回收器(GC)在不时清理和整合旧内存方面也做得很好


在某些情况下,字符串(和其他对象)可以被分配内存(以及其他资源,如文件句柄),而这些内存在使用后不会被释放,因此需要使用
Dispose()

很难说,因为内存使用率很低,垃圾收集器可能从未启动过。试着运行几天你的服务。这是我的想法,但很难确定。谢谢你的帮助!它安装在我的测试服务器上,将在周末运行。我将在周一提供更新。我同意@zmbq。看几天,看看会发生什么。内存使用情况将根据代码执行的操作和垃圾回收器而有所波动,但应在平均值范围内。问题是有效的,否决票是怎么回事?@HenkHolterman单凭数字并不能说明什么,但问题仍然有效。他认为他们可能是内存泄漏,他提供了他认为有用的信息,并希望其他人提供建议。显然,其他人能够提供帮助,这是本网站的全部要点。。。(除了赚钱:)所以这个问题至少对我来说是有效的,但那只是我的观点。谢谢!我将查看CLR分析器并尝试注释我的HTTP请求。我会在周一给你回复结果。谢谢你更详细的解释。你说的关于弦的话很有道理,我只是希望它更稳定一点。谢谢!