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];
}
おもしろいことに、これは私が最初に持っていたものと同様のタイミングを私に与えています.