C# 跟踪WCF服务中的内存泄漏

C# 跟踪WCF服务中的内存泄漏,c#,performance,wcf,iis-7,memory-leaks,C#,Performance,Wcf,Iis 7,Memory Leaks,我有一个WCF服务,目前在经典模式下使用.NET4.0托管在IIS7中。该服务通常在250到400mb之间运行,这是合理的,因为它所连接的数据库的大小只有大约300mb。随着内存使用率的增加,CPU使用率保持在0%到15%之间。然后,CPU和内存的使用将随机急剧增加。RAM使用率将上升到PHSYIC内存限制(在此EC2实例上为1.7GB),CPU将在100%时达到峰值,然后返回到25%到50%之间。几分钟后,内存使用率和CPU使用率将降至正常水平 有人知道这是什么原因吗?如果没有,有没有一个好办

我有一个WCF服务,目前在经典模式下使用.NET4.0托管在IIS7中。该服务通常在250到400mb之间运行,这是合理的,因为它所连接的数据库的大小只有大约300mb。随着内存使用率的增加,CPU使用率保持在0%到15%之间。然后,CPU和内存的使用将随机急剧增加。RAM使用率将上升到PHSYIC内存限制(在此EC2实例上为1.7GB),CPU将在100%时达到峰值,然后返回到25%到50%之间。几分钟后,内存使用率和CPU使用率将降至正常水平


有人知道这是什么原因吗?如果没有,有没有一个好办法来追踪这个问题?我已经使用PerfMon查看了使用情况,但是我找不到一个好方法来跟踪WCF服务中所有内存的实际使用位置。非常感谢您的建议。

我觉得您没有正确关闭连接。当您使用WCF时,请始终注意连接实现IDisposable-如果您不使用它,连接将保留,数据将被存储。正确地使用“using”,你可能会解决这个问题

其次,这可能只是意味着你正在使用PerSession模式。如果您使用的是会话,它们当然会被存储:-)此外,WCF中存在一些已知的错误,可能会导致这种情况。最值得注意的是“单身”模式;将其更改为“PerCall”,它可能会完全解决您的问题

我见过一些这样会导致内存泄漏的案例


至于评测,我是红门/蚂蚁的超级粉丝,但也有其他评测工具。

按照你们的建议下载了一个评测工具。原来这不是我在做的事情,但是AE.Mail库(我正在使用)中的搜索功能的工作方式有一个bug,每5分钟就会导致内存大量膨胀。我使用的是RedGate的,非常棒,感谢大家的建议。

你可以试试JetBrains profiler,它在10天的试用期内功能齐全如果我们使用“using”语句,我们还需要实现IDisposable吗@atlaste@RamiZebian都一样
using(x=…){…}
try{…}finally{x.Dispose();}