玩转动态编译(三) 提高性能,抛弃反射

通过之前2篇文章的介绍,大家一定发现了,动态编译后的对象只能通过反射调用,但是反射往往是 一个程序性能的瓶颈,这个真的无法突破么?答案当然是否定的,接下来就我就来说说怎么才能,挖掘 动态编译的潜力。

一点废话

我刚来博客园才1星期左右,昨天才弄懂怎么发表到首页,先 说声抱歉了,昨天的文章有几个地方贴的源码居然少了几个字符,有点莫名其妙,也难怪有人不能运行 了,虽然是小错误,但是如果认真检查的话也是可以避免的,这是我的失误。

还有一点,这个《 玩转动态编译》是一个系列的,虽然没有大纲,不知道会写到几,但是内容一定是循序渐进的,所以如 果你看到了不合理的地方,请不要惊讶,可能我只是为了更好理解,也许下一篇就会把这个地方重构的 。

回复上一篇中的博友 飘的移

引用我只想:说这个效率实在太慢了,楼主什么时候能做 到接近FastJson或者Newton.Json的速度就牛叉了

FastJson是Java的,我测试不了,但就 Newtonsoft.Json的效率来说超过他还是可以的,所以在这个系列没有over之前耐心期待吧。。。。(这 个算广告吗)

书归正传,话转正题

通过之前2篇文章的介绍,大家一定发现了,动态编译 后的对象只能通过反射调用,但是反射往往是一个程序性能的瓶颈,这个真的无法突破么?答案当然是 否定的。

那怎么才能抛弃反射呢?

仔细看之前的《玩转动态编译》大家可以发现,之前2 个栗子编译的都是静态方法。
回到昨天的栗子中,被静态编译的User解析类

using 

blqw;using System;using System.Collections;using System.Text;public class 

_336090f4e7724d2585b07e79210decb4{    public static string a(User obj)    { 

       return new StringBuilder().Append("{\"UID\":")            

.Append(Json.Converter2.FromGuid((System.Guid)obj.UID))            .Append(",\"Name\":")            .Append(Json.Converter2.FromString((System.String)obj.Name))            .Append(",\"Birthday\":") 

           .Append(Json.Converter2.FromDateTime((System.DateTime)obj.Birthday)) 
   .Append(",\"Sex\":")            .Append(Json.Converter2.FromEnum((Enum)obj.Sex))            .Append(",\"IsDeleted\":")            .Append(Json.Converter2.FromBoolean((System.Boolean)obj.IsDeleted))            .Append(",\"LoginHistory\":")            .Append(Json.Converter2.FromArray(((IEnumerable)obj.LoginHistory).GetEnumerator()))            .Append(",\"Info\":")            .Append(Json.ToJson_2(obj.Info))

            .Append("}").ToString();    }}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json
, 编译
, 反射
, append
, fastjson
, 阿里巴巴fastjson问题
, system
, obj
, fastjson hibernate
, fastjson 时间格式化
, fastjson map
, json性能测试
fastjson常用方法
反射和反编译、java 反射性能、反射性能、golang 反射性能、java反射性能优化,以便于您获取更多的相关知识。

时间: 2024-09-14 23:08:55

玩转动态编译(三) 提高性能,抛弃反射的相关文章

玩转动态编译(二) 实战

在玩转动态编译:一.初识中,我们已经学会了最简单的使用动态编译.今天直接由实战入手,看看 真实情况下的动态编译能为我们来带什么. 今天要演示的实例是一个在实际开发中经常遇到的情 况,对象转Json. 我将会使用2种方式分别做一个转json字符串的实例,1:反射:2:动态编译 分析问题 分析C#对象在json中的映射.总体来说json对象只有几种情况 键值对 对象,由多组键对象+值对象构成,最外面是一对花括号包裹,键值对对象同时也可作为"值对象"使用 数组对象,由多个值对象构成,最外面是

玩转动态编译(一) 初识

动态编译的好处其实有很多,但是我发现很多人其实没有真正理解或者没有灵活运用动态编译,使得这 么强大的一个功能变成了鸡肋.在我自己使用的工具库中有很多地方都使用了动态编译,以后我会慢慢 把工具库中的代码都发布出来,所以先把动态编译的相关知识点整理了一下 什么是动态编译? 我的个人理解就是,在程序运行期间,将C#代码的字符串编译成为程序集对象,并通过反射该程 序集调用编译后的成员. 比较容易理解的一种解释就是类似于SqlServer中的 Exec ('select * from [table]')

玩转动态编译(四) 封装

既然要使用动态编译,那么为他封装一个调用类,在调用时省去大量不必要的编码操作还是很有必要的 . 为什么要封装? 其实这个说起来很简单,就是发现现有的动态编译类在使用过程中显 得并不是那么好用.我觉得我可以让他变的更易使用. 所以我应该重新封装了一个 DynamicCompile类. 不过在这之前我还要考虑一下一个问题: 我需要什么? 在使 用动态编译的过程中,我逐渐的发现,动态编译有以下几种情况 1.我拼接了一个静态类的代码, 需要返回这个类的类型 2.我拼接了一个拥有无参构造函数的类的代码,需

在存储过程中执行动态sql语句,能否提高性能

问题描述 原本在后台写的sql语句很复杂,属于多表连接操作,现在把它放在了存储过程里用动态sqlexec执行,能否提高性能呢 解决方案 解决方案二:1.可以减轻程序负担,把这些工作都交给DBMS2.程序维护起来更加简单3.仅是个人观点解决方案三:存储过程执行动态sql语句时结尾exec(@sql)和execsp_executesql@sql有何区别解决方案四:差不多的,要提高用存储过程好了解决方案五:但是参数是要动态的,必须用动态SQL

通过 SQL Server 2005 索引视图提高性能

本文介绍了 SQL Server 2005 Enterprise Edition 中经过改进的索引视图功能.文中对索引视图进行了说明介绍,并讨论了可通过该功能改善性能的一些具体情况 一.索引视图 多年以来,Microsoft SQL Server 一直支持创建称为视图的虚拟表.通常,这些视图的主要作用是: • 提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中. • 提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式. 通过 SQL Server 2000,S

用 SQL Server 2000 索引视图提高性能

server|视图|索引|性能 什么是索引视图? 许多年来,Microsoft SQL Server 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某个子集. 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据. SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能.它可以在一个视图上创建唯一的群集索引和非群集索引,可以改进最复杂查询的数据访问性能.在 S

Java理论与实践: 动态编译与性能测量

这个月,我着手撰写一篇文章,分析一个写得很糟糕的微评测.毕竟,我们 的程序员一直受性能困扰,我们也都想了解我们编写.使用或批评的代码的性能 特征.当我偶然间写到性能这个主题时,我经常得到这样的电子邮件:"我写的 这个程序显示,动态 frosternation 要比静态 blestification 快,与您上一 篇的观点相反!"许多随这类电子邮件而来的所谓"评测"程序,或者它们运行 的方式,明显表现出他们对于 JVM 执行字节码的实际方式缺乏基本认识.所以 ,在我着

深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹.借助该工具,是我们的开发 显得更加高效而轻松.从Microsoft把这个IDE的名字从VS.NET 该为VS(比如原来的Visual Studio.NET 2003,现在的版本叫VS2005),可以MS对该IDE的期望和野心:MS要把它改造成一个万能的IDE.不过任何都有其两面性,对于我们广大的开发者来说,VS是我们的各种行为简单化,傻瓜化:但是在另一方面,他也会蒙蔽我们的眼睛,使我们对它背后做的事

静态编译与动态编译

静态编译与动态编译的区别 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令.所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源.缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库:二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行. 静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,