问题简要:使用异常处理,还是循环文件性能好?
我的思路和想要实现的功能:
我有一个Msg类(静态),主要的功能就是,程序运行期间,给出提示或者报告错误。一开始我是用Msg.Alert("登录成功!");。后来改成Msg.Alert("User_LoginSuccess!");这个"User_LoginSuccess",就是全局资源xpnewMsg.resx中的一个键。当然xpnewMsg.zh-CN.resx中还有对应的一个中文的键。这样的话,就可以应付某些企业网站有英文版的状况了。
后来发现,使用资源的这种,每次出现一个新状况需要提示,都需要添加一个键。对于大部分提示来说,都做成固定的键,这倒没有什么,但是,总会出现,需要提示,但是不能添加键、或者来不及添加键的时候。比如说Msg.Alert("测试cookiename:" + cookiename);
我现在处理的办法就是,捕捉键名在资源中不存在的情况,然后直接把消息返回的办法。下面是代码:
public static string getMsgCHS(string str)
{
string m = str;
//HttpContext.Current.Response.Write("<br>m:" + m);
try
{
// return Resources.xpnewMsg.err_DBSiteNull;
m = (string)HttpContext.GetGlobalResourceObject("xpnewMsg", str);
if (m.Trim() == String.Empty)///新增加的功能。
m = str;
}
catch (System.Resources.MissingManifestResourceException e)
{
m = "未知错误(代码:" + str + ")。系统没有为这个提示指定说明。你可以把这个代码发送给xpnew@126.com\n{Enlight Version Notice:}\nThis error's Explanation not ready.\nAsp.net异常:未能找到具有指定 classKey 的资源对象。";
}
catch (Exception)
{
m = str;
}
//HttpContext.Current.Response.Write("<br>m:" + m);
return m;
}
这是0个办法,但是我对异常捕捉总是不太放心,担心异常捕捉过多,会不会对性能造成负担。于是找了一下资料,想要看看能不能循环列表,如果没有与str匹配的键就直接返回。
翻了几遍MSDN,又在网站搜索了几回。在网站搜索到了一篇文章,后来又在MSDN上看到差不多的东西,具体的办法就是使用System.Resources 命名空间 上的ResXResourceReader类。但是这个类是通过读取、解析xml文件的方式这种办法,如果专门操作资源文件,这样无可厚非,但是如果在各种复杂的应用中进行这样的操作,我觉得就会牺牲很多的性能。
所以最后的问题是,异常捕捉和循环文件这两种方式,哪一种能性能上来说更好一些?
我觉得有一点是可以肯定的就是,异常处理会占用很大的开销,如果在没有更好的解决方案之前,我觉得循环文件会更好些。再说,如果使用异常处理这种技巧可以实现,但是异常处理不是干这个用了,可能这种异常在本质上也是通过循环文件来达到的!
多加一个参数不就行了?Msg.Alert(key,type)
循环文件要好些吧!我就是用循环文件的。