2

我们将 Web 系统移至 Windows 身份验证。将其部署到生产环境后,我们面临内存泄漏。我们使用 poolmon.exe util 定义它是分页池内存泄漏(标记 Toke)。在最近的修改中,我们只添加了以下两种方法:

using System.DirectoryServices.AccountManagement;


private bool IsLoginValid(string login, string password)
{
    bool isValid = false;
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName))
    {
        isValid = pc.ValidateCredentials(login, password);
    }
    return isValid;
}

private bool isMemberOf(string login, string group)
{
    bool result = false;           
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName))
    {
        using (UserPrincipal user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, login))
        {
            if (user != null)
            {
                result = user.IsMemberOf(pc, IdentityType.Name, group);
            }
        }
    }
    return result;
}

请帮助确定泄漏的确切点,并在可能的情况下提供解决方法。谢谢你。

4

2 回答 2

0

在实现PrincipalContext和/或UserPrincipal导致无法自动处理实例时可能存在错误。我以前见过这个。您可以通过将 替换为 来轻松确认/修复此问题usingtry-finally如下所示。

PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName);
try
{
     isValid = pc.ValidateCredentials(login, password);
}
finally
{
     pc.Dispose();
}
于 2013-10-30T11:45:33.370 回答
0

方法UserPrincipal.FindByIdentity()有内存泄漏。

于 2013-11-13T09:10:50.290 回答