2017-06-22 147 views
0

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

+0

你是否正确处理了你的代码中的资源?可能导致内存泄漏 – mituw16

+0

你有任何代码可以告诉我们吗? –

+0

取内存分析器并检查消耗是否正常 –

回答

0

这是否预计会取决于许多事情,包括服务的功能,代码的外观,什么资源被使用,你配置了什么样的服务激活和绑定等等。

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

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

0

Normlaly .NET垃圾回收器会在使用后释放内存,前提是您已经编写了代码perfectley fine.In.In case您的应用程序有内存泄漏,因为代码的某些部分或某些库正在使用内存,而不是releaseit.一个简单的例子可以是

一个静态集合定义从数据库加载一些数据。这将不会被GC收集,因为我们已将其定义为静态代码。类似地,还有其他原因,例如会话数据,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 ,然后修复其被泄漏存储器的代码或库。