0

ASP.NET Web サイトのメンバー/ユーザーのリストをループ処理する必要があるアプリケーションを作成しています。制御できない例外をスローできるメソッドを呼び出しています。

ここにスニペットがあります:

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[] { "" };
    }
}

Roles.GetRolesForUser は 3 つの異なる例外をスローできますが、例外がスローされた場合、アプリケーション全体の実行を停止したくないので、次のメンバーに進みたいだけです。

問題は、try と catchはパフォーマンスが高く、try と catch なしで実行した場合に比べてかなりの時間がかかることです。

パフォーマンスに影響を与えずにこれを行うにはどうすればよいですか?

提供された回答に基づく私の解決策:

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

    return new string[0];
}

おもしろいことに、これは私が最初に持っていたものと同様のタイミングを私に与えています.

4

1 に答える 1

3

msdnからわかるように、このメソッドによって次の例外がスローされます。

  • System.ArgumentNullExceptionユーザー名が null の場合
  • 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);    
}
于 2013-04-03T10:16:19.183 に答える