• * KJFramework.Messages 智能二进制消息框架
  • 2010-05-18 更新
  • **********************************************************************************
1. 增加了对于数组的支持(暂时不支持泛型)。
在数组中的元素类型将会被默认支持(无论是需要序列化的,还是默认类型,或者是只能类型)。
2. 增强了异常捕获。


  • * KJFramework.Messages 智能二进制消息框架
  • 2010-06-22 更新
  • **********************************************************************************
1. 修改了当判断数据类型时,先判断数组的BUG。


  1. # 修改方案:
  1. 1. 增加可扩展对象概念,支持平滑的协议升级,兼容新协议。
  2. 2. 尝试增加自定义消息格式化器,允许使用方根据一个消息格式
  3. 器来进行消息的转换处理。
  4. 3. 对于同一个项目,不同消息的元数据拆分问题。(是否考虑使用拆分规则?,OR 使用原有职能对象进行类型分析?)
###################################################



  • * KJFramework.Messages 智能二进制消息框架
  • 2010-07-19 更新
  • **********************************************************************************
1. 已经完成了可扩展对象的设计与编码工作,并且能够支持平滑的协议升级,以及兼容新协议。
2. 已经初步允许第三方人员使用该框架进行消息结构的自定义,并且已经能够自定义消息格式化器。


  • * KJFramework.Messages 智能二进制消息框架
  • 2010-07-29 更新
  • **********************************************************************************
1. 增加了智能类型分析器
2. 增加了分析器的概念(一个类型分析器用来分析并将分析的结果进行保存。 一个智能类型的分析是很耗时的,
所以需要采用缓存的手段减少对于相同类型的再次分析。通过启用分析器的概念,使得在频繁对于指定对象的
拆分和解析中,使用缓存中的分析结果即可,节省了CPU时间片和BLOCK的时间。)
:第三方消息结构引擎并没有应用此次新增的概念。

  • * KJFramework.Messages 智能二进制消息框架
  • 2010-09-01 更新
  • **********************************************************************************
1. 添加了对于DateTime类型的支持。
2. 修改了Pickup一个对象后,改对象的IsPickup属性为false的BUG。

  • * KJFramework.Messages 智能二进制消息框架
  • 2010-10-05 更新
  • **********************************************************************************
1. 增加了对于智能对象的“热缓存”概念,使用“热缓存”将会使序列化到字节数组的速度更加快捷,
而且在对象引擎中也修改了部分代码,用来提供基础支持。
2. 完美支持了枚举类型。


  • * KJFramework.Messages 智能二进制消息框架
  • 2011-04-18 更新
  • **********************************************************************************
1. TLV中的Length类型由short改为了int. (累死我了)
哦,这是一个令人沮丧的改变,因为之前的序列化规则中没有想到的是,会有一个对象复杂到需要30000个BYTES都无法满足,
当这样的场景出现时,我们设定的Length类型为short,就已经超出其的范围了,我们不得不找寻一个更大的单位来保证程序的运行。





  • * KJFramework.Messages 智能二进制消息框架
  • 2011-06-21 更新
  • **********************************************************************************
1. 更新了IntellectObjectEngine.GetObject的逻辑,将内部字典的操作从ContainsKey->Indexer
改为了TryGetValue, 进一步提升操作性能


  • * KJFramework.Messages 智能二进制消息框架
  • 2011-07-11 更新
  • **********************************************************************************
1. 为智能对象引擎(IntellectObjectEngine)增加了预热(Preheat)方法.
2. 优化了IntellectObjectEngine.GetObject解析bytes时计算offset的逻辑.
3. 删除了部分类库中实现了IDispose接口的逻辑,删除了析构函数.
4. 删除了IntellectTypeProcessorMapping中的同步对象锁, 删除这部分的逻辑是因为,我们期望所有
智能类型处理器的注册任务都应该在程序初始化的时候来完成。



  • * KJFramework.Messages 智能二进制消息框架
  • 2011-08-25 更新
    • 1. 重写了IntellectObjectEngine.ToBytes(IIntellectObject obj)方法。
    2. 经过优化后,序列化后的二进制更小了,而且内部还集成了对于特殊值类型的优化方案。
    比如,如果字段是int类型,则不带Length了,这样一来也就节省了一笔开销.
    3. 重写了内部序列化数组结构的实现方式,由原来的Array element = TLV
    改为现在的:Array element = LV. 这里省去了T, 如果当前的元素内容为null, 则L = 0.
    4. 为IntellectObjectEngine.ToBytes(IIntellectObject obj)方法编写了单元测试.
    5. 创建了VT类型,用于标记某些需要内部优化的值类型.
    6. 由于内部序列化数组结构得到了优化,也就不存在了T不够用的问题。



    • * KJFramework.Messages 智能二进制消息框架
    • 2011-08-26 更新
      • 1. 重写了IntellectObjectEngine.GetObject<T>(Type target, byte[] data)方法。
      2. 经过再三考虑后,决定还是去除了序列化数组时开头的4个字节 rank.
      3. 重写了内部反序列化数组结构的实现方式,内部将会分为2种:
      (1). 使用VT.Size来截取字节流
      (2). 使用dynamic length来截取字节流
      4. 为IntellectObjectEngine.GetObject<T>(Type target, byte[] data)方法编写了单元测试.
      5. 创建了TempParseStruct用于临时存储解析数据所需要的信息
      6. 优化了若干处类型的判断,比如将"Property.Value is Array"替换为"Property.PropertyInfo.PropertyType.IsArray".
      7. 增加了DateTime类型为fixed data length type.




      • * KJFramework.Messages 智能二进制消息框架
      • 2011-08-29更新
        • 1. 修改了一处判断类型是否为VT的BUG, 现在的逻辑为:
        如果当前字段类型是枚举,则取到该枚举的真正类型,然后再判断VT
        2. 为了庆祝此次智能二进制消息框架的升级,特此提升版本号为:2.0.0.0


        • * KJFramework.Messages 智能二进制消息框架
        • 2011-08-30更新
          • 1. 减少了Pickup data时二进制数组的create or copy的工作量.
          2. 重构了IntellectObjectEngine.GetObject<T>(Type target, byte[] data)方法。
          重构后,该方法内部更加清晰,经过代码优化,减少了一层循环,使得解析代码更加快速(已经能够攀比序列化方法的速度了)
          3. 创建了实例帮助器(InstanceHelper)用来支持GetObject<T>方法的重构
          4. 添加了对于托管指针(IntPtr)的序列化和反序列化支持
          5. 添加托管指针(IntPtr)为固定长度(Fixed Length)数据类型
          6. 优化了IntellectTypeProcessorMapping类



          • * KJFramework.Messages 智能二进制消息框架
          • 2011-08-31更新
            • 1. 重写了GetObjectIntellectTypeAnalyser.Analyse方法
            2. 重写了ToBytesIntellectTypeAnalyser.Analyse方法
            3. 解决了当一个智能对象中存在索引器字段时,无法序列化的问题



            • * KJFramework.Messages 智能二进制消息框架
            • 2011-08-31更新
              • 1. 重写了IntellectObjectEngine.GetObject<T>方法
              2. 编写了IntellectObjectEngine.GetObject<T>方法的重载,用于内部计算Offset
              3. 为IntellectTypeProcessor增加了用于非托管计算的方法
              4. 为IntellectTypeProcessor增加了用于非托管计算的支持标示: IIntellectTypeProcessor.SupportUnmanagement
              5. 重写了数组类型处理器内部GetObject的算法
              6. 从今天开始,KJFramework.Message框架内部的解析工作,全部由托管解析改为非托管解析!
              更改后的好处: 减少了字节数组的copy, 直接的缓解了GC的压力,以及减少了CPU的时间片!
              也就是说整个的解析过程中,将不会再创建新的字节数组,只是用入口传入的字节数组即可。



              • * KJFramework.Messages 智能二进制消息框架
              • 2011-09-15更新
                • 1. 修改了ByteArrayIntellectTypeProcess.SupportUnmanagement = true.
                2. 重写了(unmanaged) ByteArrayIntellectTypeProcess.Process()方法
                3. 修正了无法正确解析byte[]类型字段值的问题。



                • * KJFramework.Messages 智能二进制消息框架
                • 2011-09-19更新
                  • 1. 修正了序列化一个对象时,没有按照Property.Id的顺序进行序列化的问题
2. 修正了(unmanaged) ByteArrayIntellectTypeProcess.Process()方法中计算字节偏移量的BUG

Last edited Sep 22, 2011 at 4:31 PM by g0194776, version 2