1

在 Windows Server 2012 的 IIS 8 中的应用程序池下运行了一个 .NET WCF 服务。每次调用该服务时,应用程序池的内存使用量都会不断增加。(当服务空闲时它会略微下降)。内存消耗现在为 1GB。仅当应用程序池被回收时,内存使用量才会减少,当前默认设置为 29 小时。这种类型的内存消耗是预期的行为吗?我的印象是,一旦请求完成,内存就会被释放

4

2 回答 2

1

这是否符合预期将取决于很多事情,包括服务的功能、代码的外观、使用的资源、您配置的服务激活类型以及绑定等等。

问题是要弄清楚你是否真的看到内存泄漏,但这需要更多信息,包括仔细分析“CLR内存”性能计数器和操作系统计数器,如“进程” \Handle Count”和“Process\Private Bytes”。

我建议首先通过对性能计数器的分析来确定您是否真的看到了泄漏,然后使用 PerfView 和转储分析等工具来找出发生了什么。

于 2017-06-22T21:56:01.430 回答
0

Normlaly .NET 垃圾收集器将在使用后释放内存,前提是您已经编写了完美的代码。在您的情况下,您的应用程序存在内存泄漏,因为您正在使用的代码的某些部分或某些库正在消耗内存而不是释放它。一个简单的例子可以是

定义的静态集合,它从数据库加载一些数据。这永远不会被 GC 收集,因为在我们的代码中我们将其定义为静态的。类似地,还有其他原因,如 Session data 、MemoryCache动态程序集等等。

有关它如何发生的更多信息,请查看内存泄漏的常见原因、内存泄漏的处理方法、泄漏的原因等帖子

实际上,首先您必须调查内存泄漏的原因, 然后修复泄漏内存的代码或库。

于 2017-06-23T06:33:23.160 回答