原先的测试不全面,发觉class结构一复杂,反序列化时分析Json string出现了严重的效率问题。 多方求助也没有解决。 其间试了很多人的json实现(官方的两个,google到的一个,teddy的nbear里的)。
- 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; } }
都有这个问题。 后来,一点点排查,先从一个最简单的分析Json string开始,逐渐往里面加属性测试。 ***发觉当我加入 a:1.01 时速度很慢,而 a:1 时速度正常。 然后才定位到问题所在: 官方代码:
- class test
- {
- var $var = 0;
- function add(){
- echo $var+10;
- }
- }
- $unserialize_var = new test;
- $serializeserialize_var = serialize($unserialize_var);
- echo $serialize_var;
- $unserialize_var = null;
- $unserializeunserialize_var = unserialize($serialize_var);
- $unserialize_var->add();
- $arr = array
- (
- 'Name'=>'Peter',
- 'Age'=>20
- );
- $jsonencode = json_encode($arr);
- echo $jsonencode;
这段代码在分析Json string里面会有严重的效率问题。 应该是C#的异常机制不完善造成的! 在java里,利用异常做这种工作对效率没有任何影响,(当然,也不提倡这么写,偷懒的行为)。
- ''' <summary>
- ''' JSON 序列化。
- ''' </summary>
- ''' <param name="Value">物件。</param>
- Public Shared Function JsonSerialize(ByVal Value As Object) As String
- Dim oSerializer As System.Web.Script.Serialization.JavaScriptSerializer
- oSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
- Return oSerializer.Serialize(Value)
- End Function
- ''' <summary>
- ''' JSON 反序列化。
- ''' </summary>
- ''' <param name="Text">JSON 字符串。</param>
- Public Shared Function JsonDeserialize(Of T)(ByVal Text As String) As T
- Dim oSerializer As System.Web.Script.Serialization.JavaScriptSerializer
- oSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
- Return oSerializer.Deserialize(Of T)(Text)
- End Function
【编辑推荐】