C# 处理在试图保持性能的同时抛出异常的方法
我正在编写一个应用程序,该应用程序要求我循环浏览ASP.NET网站中的成员/用户列表。我正在调用一个方法,该方法可能引发我无法控制的异常 以下是一个片段:C# 处理在试图保持性能的同时抛出异常的方法,c#,asp.net,.net,try-catch,C#,Asp.net,.net,Try Catch,我正在编写一个应用程序,该应用程序要求我循环浏览ASP.NET网站中的成员/用户列表。我正在调用一个方法,该方法可能引发我无法控制的异常 以下是一个片段: foreach(var member in members) { memberExport.Groups = GetGroups(member); } 这里是GetGroups protected string[] GetGroups(Member member) { try { return Rol
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可以抛出三个不同的异常,但如果抛出异常,我不希望整个应用程序停止运行,我只希望继续运行到下一个成员
问题是,try-and-catch在性能上是昂贵的,与我不使用try-and-catch运行它相比,它花费了相当多的时间
我怎样才能在不影响性能的情况下做到这一点
基于提供的答案的我的解决方案:
有趣的是,这给了我与我最初拥有的时间相似的时间安排。从中可以看出,此方法引发了以下异常:
- 用户名为null时的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);
}
从中可以看出,此方法引发了以下异常:
- 用户名为null时的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);
}
这真的是一个瓶颈吗?你在上面运行了探查器吗?你有权访问
GetRolesForUser
代码吗?您应该更改该方法,以便它不会抛出异常,而是返回一个空字符串。这样,你就不必在以后检查结果了。是的,我让过程在4分钟内完成,但现在我已经等了15分钟。唯一的更新是在方法周围添加try-and-catch。这很奇怪。这毫无意义——异常处理不应该增加那么多开销。如果您在第一次计时中没有try/catch,您是如何处理异常以进行计时的?我怀疑你计算时间的方式是不可比的。你到底看到了什么例外?您确定需要返回newstring[]{”“}代码>而不是新字符串[0]代码>?这很好,我可以返回新字符串[0],但这显然不是问题所在。我在一些没有成员的成员身上看到了一个例外。这些成员是系统构建时的过时成员。我已经想出了一个解决方案,我将补充我的问题。这真的是一个瓶颈吗?你在上面运行了探查器吗?你有权访问GetRolesForUser
代码吗?您应该更改该方法,以便它不会抛出异常,而是返回一个空字符串。这样,你就不必在以后检查结果了。是的,我让过程在4分钟内完成,但现在我已经等了15分钟。唯一的更新是在方法周围添加try-and-catch。这很奇怪。这毫无意义——异常处理不应该增加那么多开销。如果您在第一次计时中没有try/catch,您是如何处理异常以进行计时的?我怀疑你计算时间的方式是不可比的。你到底看到了什么例外?您确定需要返回newstring[]{”“}代码>而不是新字符串[0]代码>?这很好,我可以返回新字符串[0],但这显然不是问题所在。我在一些没有成员的成员身上看到了一个例外。这些成员是系统构建时的过时成员。我已经想出了一个解决办法,我将把它添加到我的问题中。