在Windows Server 2012的IIS 8中,应用程序池下运行.NET WCF服务。每次调用服务时,应用程序池的内存使用量都会不断增加。 (当服务空闲时,它会略微下降)。内存消耗现在为1GB。仅当应用程序池被回收时才会减少内存使用量,目前将其设置为默认值29小时。 这种类型的内存消耗是预期的行为吗?我的印象是,一旦请求完成,内存就会被释放
答案 0 :(得分:0)
这是否是预期的取决于许多事情,包括服务的作用,代码的样子,使用的资源,您配置的服务激活类型以及绑定等。< / p>
问题是要弄清楚你是否真正看到内存泄漏,但这需要更多的信息,包括仔细分析&#34; CLR内存&#34 ;性能计数器和OS计数器,例如&#34; Process \ Handle Count&#34;和&#34;处理\私人字节&#34;。
我建议首先开始对性能计数器进行分析,以确定您是否确实发现了泄漏,然后使用PerfView和转储分析等工具来确定&#39;继续。
答案 1 :(得分:0)
Normlaly .NET垃圾收集器将在使用后释放内存,前提是您已编写完好的代码。在您的情况下,您的应用程序存在内存泄漏,因为您使用的代码或某些库的某些部分正在消耗内存而不是释放内存一个简单的例子可以是
定义了一个从数据库加载一些数据的静态集合。这将永远不会被GC收集,因为在我们的代码中我们将其定义为static。类似地,还有其他原因,如会话数据,MemoryCache,dynamic assemblies,和无数其他原因。
有关如何实现的更多信息,请查看Common Causes of Memory Leaks,what to do for memory leak,causes of leak SO post。
实际上,首先你需要investigate the cause of the memory leak 然后修复泄漏内存的代码或库。