解决了json反序列化的效率问题。

原先的测试不全面,发觉class结构一复杂,反序列化时分析json string出现了严重的效率问题。
多方求助也没有解决。
其间试了很多人的json实现(官方的两个,google到的一个,teddy的nbear里的)。
都有这个问题。

后来,一点点排查,先从一个最简单的json字符串开始,逐渐往里面加属性测试。
最后发觉当我加入 "a":1.01 时速度很慢,而 "a":1 时速度正常。

然后才定位到问题所在:

官方代码:
      if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+')
            {
                try
                {
                    return Convert.ToInt32(s);
                }
                catch (Exception e)
                {
                    string msg = e.Message;
                }
                try
                {
                    return Convert.ToDouble(s, NumberFormatInfo.InvariantInfo);
                }
                catch (Exception e)
                {
                    string msg = e.Message;
                }
            }
            
这段代码在c#里面会有严重的效率问题。
应该是C#的异常机制不完善造成的!
在java里,利用异常做这种工作对效率没有任何影响,(当然,也不提倡这么写,偷懒的行为)。

把这段代码转换成
      if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+')
            {
                if (s.Contains("."))
                    return Convert.ToDouble(s, NumberFormatInfo.InvariantInfo);
                else
                {
                    long tmp = Convert.ToInt64(s);
                    if (tmp > Int32.MaxValue || tmp < Int32.MinValue)
                        return tmp;
                    return Convert.ToInt32(tmp);
                }
            }
           
问题解决。


速度提高50倍。

另外,用dynamic method调用代替了反射,也提高了序列化/反序列化bean的性能。  

.

转载于:https://www.cnblogs.com/yang-peng/archive/2006/07/05/443025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值