处理在试图保持性能时抛出异常的方法

本文关键字:抛出异常 方法 性能 处理 | 更新日期: 2023-09-27 18:07:23

我正在编写一个应用程序,要求我在ASP中循环成员/用户列表。. NET网站。我正在调用一个方法,该方法可能会抛出我无法控制的异常。

下面是一个片段:

foreach(var member in members)
{
    memberExport.Groups = GetGroups(member);
}

这里是GetGroups

protected string[] GetGroups(Member member)
{
    try
    {
        return Roles.GetRolesForUser(member.LoginName);
    }
    catch(Exception ex)
    {
        return new string[] { "" };
    }
}

角色。GetRolesForUser可以抛出三种不同的异常,但是如果抛出了异常,我不希望整个应用程序停止运行,我只想继续下一个成员。

问题try and catch在性能上是昂贵的,与我不运行try and catch相比,它花费了相当多的时间。

如何在不影响性能的情况下做到这一点?

我的解决方案基于答案/s提供:

protected string[] GetRolesForUser(Member member)
{
    if(Membership.GetUser(member.LoginName) != null && member.LoginName != "")
        return Roles.GetRolesForUser(member.LoginName);
    return new string[0];
}

有趣的是,这给我的时间与我最初的时间相似。

处理在试图保持性能时抛出异常的方法

从msdn中可以看到,这个方法抛出了以下异常:

  • System.ArgumentNullException
  • System.ArgumentException当用户名包含逗号
  • System.Configuration.Provider.ProviderException,当角色管理未启用

我认为你可以很容易地处理他们:

protected string[] GetGroups(Member member)
{
    string login = member.LoginName;
    if (login == null || login.Contains(",") || !Roles.Enabled)
        return new [] { "" };    
    return Roles.GetRolesForUser(login);    
}