我有每会话服务模式的WCF服务,并使用WIF进行身份验证/授权。但是一些客户正在使渠道泄露。
有没有办法通过内存转储和windbg查看哪个客户端泄漏? 我无法使用客户端IP地址,因为多个客户端来自同一个IP。 用户身份可能很有用,但我找不到泄露的服务实例和使用的ClaimIdentity之间的连接。
答案 0 :(得分:2)
以下WinDbg可以帮助您找到泄漏的渠道:
!dumpheap -type <Some WCF Type or yours that you suspect to be leaking>
这将显示特定类型的所有实例的列表。一旦识别出泄漏对象
!do <object address>
这将让您检查对象及其属性。这样您就可以获得用于此频道的ClaimId
!gcroot
这将让您知道哪个对象将泄漏对象保留在内存中并帮助您修复它。这听起来比实际识别客户端更有用,因为它似乎更可能是您的服务器代码的问题。
其他有用的命令
!gcwhere <Address>
!FindRoots -gen 1
!FindRoots <Address>
!GCHandleLeaks
!eeheap
!dumpheap -stat
!TraverseHeap fileName
!ObjSize
!FindRoots
那就是说,我要推荐RedGate的内存分析器。在过去几年中,识别内存泄漏已经走过了漫长的道路。你可以获得14 day trial。