随笔分类 -  性能优化

优化反射性能的总结(下)
摘要:在前二篇博客中,我分别介绍了二种优化反射的方法:1. Delegate:委托。2. CodeDOM:动态代码生成。这是二种截然不同的方法,性能的差距也很大。今天的博客将着重比较它们的优缺点,以及给出它们的使用建议。用Delegate优化反射的缺点在评价委托方案时,我认为有必要细分一下委托方案:1. 强类型委托,例如:Action<TTarget, TValue>2. 弱类型委托,例如:Action<object, object>它们的优点分别是:强类型委托:速度快,已经最接近直接调用的性能,然而它的缺点是 不通用。弱类型委托:比较通用,且经过一些代码封装后,使用方便,但 阅读全文
posted @ 2013-03-03 21:11 Fish Li 阅读(17805) 评论(37) 推荐(65) 编辑
优化反射性能的总结(中)
摘要:问题回顾在上篇博客中,我介绍了优化反射的第一个步骤:用委托调用代替直接反射调用。然而,那只是反射优化过程的开始,因为新的问题出现了:如何保存大量的委托?如果我们将委托保存在字典集合中,会发现这种设计会浪费较多的执行时间,因为这种设计会引发三个新问题:1. 代码的执行路径变长了。2. 字典查找是有成本开销的。3. 字典集合的并发读写需要锁定,会影响并发性。再来回顾一下上次的测试结果吧:虽然通用接口ISetValue将反射性能优化了37倍,但是最终的FastSetValue将这个数字减少到还不到7倍(在CLR4中还不到5倍)。难道您不觉得遗憾吗?再看看直接调用与反射调用的对比,它们的速度相差了上千 阅读全文
posted @ 2013-02-24 21:03 Fish Li 阅读(18486) 评论(50) 推荐(64) 编辑
优化反射性能的总结(上)
摘要:反射是一种很重要的技术,然而它与直接调用相比性能要慢很多,因此如何优化反射性能也就成为一个不得不面对的问题。目前最常见的优化反射性能的方法就是采用委托:用委托的方式调用需要反射调用的方法(或者属性、字段)。那么如何得到委托呢? 目前最常见也就是二种方法:Emit, ExpressionTree 。其中ExpressionTree可认为是Emit方法的简化版本,所以Emit是最根本的方法,它采用在运行时动态构造一段IL代码来包装需要反射调用的代码,这段动态生成的代码满足某个委托的签名,因此最后可以采用委托的方式代替反射调用。用Emit方法优化反射如果我们需要设计自己的数据访问层,那么就需要动态创 阅读全文
posted @ 2013-02-18 21:32 Fish Li 阅读(41069) 评论(114) 推荐(203) 编辑
看懂SqlServer查询计划
摘要:对于SQL Server的优化来说,优化查询可能是很常见的事情。由于数据库的优化,本身也是一个涉及面比较的广的话题,因此本文只谈优化查询时如何看懂SQL Server查询计划。毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正。首先,打开【SQL Server Management Studio】,输入一个查询语句看看SQL Server是如何显示查询计划的吧。说明:本文所演示的数据库,是我为一个演示程序专用准备的数据库,可以在此网页中下载。select v.OrderID, v.CustomerID, v.CustomerName, v.OrderDate, v. 阅读全文
posted @ 2011-06-06 14:43 Fish Li 阅读(86484) 评论(120) 推荐(384) 编辑