处理在试图保持性能时抛出异常的方法
本文关键字:抛出异常 方法 性能 处理 | 更新日期: 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);
}