首页 新闻 会员 周边 捐助

因为性能方面经验欠缺,我使用资源(resx)的时候,有这么一个两难的问题

0
悬赏园豆:20 [已关闭问题]

问题简要:使用异常处理,还是循环文件性能好?

我的思路和想要实现的功能:

我有一个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文件的方式这种办法,如果专门操作资源文件,这样无可厚非,但是如果在各种复杂的应用中进行这样的操作,我觉得就会牺牲很多的性能。

所以最后的问题是,异常捕捉和循环文件这两种方式,哪一种能性能上来说更好一些?

柳城之城的主页 柳城之城 | 初学一级 | 园豆:39
提问于:2008-12-16 13:15
< >
分享
其他回答(2)
0

我觉得有一点是可以肯定的就是,异常处理会占用很大的开销,如果在没有更好的解决方案之前,我觉得循环文件会更好些。再说,如果使用异常处理这种技巧可以实现,但是异常处理不是干这个用了,可能这种异常在本质上也是通过循环文件来达到的!

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-16 13:31
0

多加一个参数不就行了?Msg.Alert(key,type)

wingoo | 园豆:1513 (小虾三级) | 2008-12-16 14:15
0

循环文件要好些吧!我就是用循环文件的。

sl2008 | 园豆:407 (菜鸟二级) | 2008-12-16 19:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册