`
yiheng
  • 浏览: 156777 次
社区版块
存档分类

C# Expression 表达式树 缓存

 
阅读更多

在学习mvc3源代码的时候,发现里面调用action的源代码如下:


里面用了表达式树,当时的我对表达式树还不怎么了解,曾提出一个疑问,为什么不用反射而要用表达式树了,在网上找了很多资料说明表达式树比反射性能要高。甚至根由大牛曾提出表达式缓存的思想,http://blog.zhaojie.me/2009/03/expression-cache-2-simple-key-cache.html。然而在mvc3中有些地方还是用了表达式树缓存的(CachedExpressionCompiler mvc3自带的)

至于怎么缓存我这里就不班门弄斧了,只是告诉一下大家Compile()这个东东很伤性能啊。

现在说说我的测试吧:


我在release下得到的结果:


在每个计算机每次执行的结果都是不同的,但是缓存了时间明显要短。

我把有关Expression表达式树缓存 Expression表达式树序列化的源代码整理了一下,方便大家下载。http://download.csdn.net/detail/dz45693/4375232
分享到:
评论

相关推荐

    C#基于表达式(Expression)实现对象深拷贝

    首先,我们需要理解什么是表达式树(Expression Tree)。表达式树是一种表示代码的抽象数据结构,它能够让我们以数据的形式查看和操作代码。在C#中,`System.Linq.Expressions`命名空间提供了构建和操作表达式树的...

    C#简单实现表达式目录树(Expression)

    在上面的代码中,我们定义了一个Student类和一个StudentDto类,然后使用表达式目录树缓存来实现数据转换。 表达式目录树是一种强大的技术,可以帮助开发者更方便地实现动态编程和代码生成。但是,它也需要开发者...

    表达式树和泛型缓存完成Mapper效果

    在C#中,`System.Linq.Expressions`命名空间提供了处理表达式树的相关类。 利用表达式树,我们可以动态地构建和编译映射规则。例如,我们可以创建一个方法,接受两个类型参数(源类型和目标类型),然后构建一个...

    C# expressions interpreter.zip

    2. 性能:解释器的性能通常低于编译后的代码,可以通过缓存表达式树、优化求值算法等方式提升性能。 3. 错误处理:正确处理语法错误和运行时异常,提供友好的错误信息,是提升用户体验的关键。 总结,C#表达式解释...

    C# 表达式绘图控件

    - C#中的`System.Linq.Expressions`命名空间提供了解析和构建表达式树的功能,这可以用于将用户输入的字符串转换为可执行的代码。 - 使用`Expression.Parse`方法可以解析简单的数学表达式,但可能需要自定义解析器...

    C#中字符串转换为计算公式

    此外,频繁的表达式树编译可能影响性能,可以考虑缓存编译后的委托。 总结,C#中将字符串转换为计算公式涉及到字符串解析、表达式树的构建、编译和执行等多个步骤。虽然过程较为复杂,但通过合理的设计和利用.NET ...

    ExpressionTreeApp.zip

    在编程领域,尤其是在.NET框架下,C#语言提供了一种强大的工具来处理动态构建的查询:表达式树(Expression Tree)。本项目"ExpressionTreeApp.zip"正是以此为核心,展示了如何根据URL参数动态地构建并执行查询...

    C#通用查询器

    在C#中,这样的通用查询器通常基于表达式树(Expression Trees)技术来实现。表达式树是一种数据结构,它表示了一段代码的结构,可以被用来分析和执行这段代码。在查询场景中,开发者可以通过构建表达式树来定义查询...

    解析字符串,按照运算表达式来计算出最终结果值.rar

    - C# 提供了 `System.Linq.Expressions` 命名空间,其中的表达式树类可以用来表示C#的lambda表达式。表达式树是数据结构,能表示代码的结构,非常适合用于编译运行时的动态表达式。 5. **编译和执行表达式**: - ...

    Anori.ExpressionObservers

    这个库可能是为了帮助开发者更方便地处理、观察和操作表达式树(Expression Trees)。在C#中,表达式树是一种数据结构,它表示代码的可执行形式,可以被用来分析、修改或执行代码。 描述中的 "Anori....

    C#高效编程改进C#代码的50个行之有效的办法( 第2版) 中文版

    13. **理解并使用Expression Trees**:表达式树可以表示代码结构,常用于元编程和动态查询。 14. **掌握枚举(Enum)的使用**:枚举类型提供了一种强类型的方式来表示一组相关的常量。 15. **了解并使用yield ...

    Metaprogramming.in.NET

    - **动态构建 Lambda 表达式**:可以使用表达式的工厂方法(如`Expression.Parameter`、`Expression.Constant`、`Expression.Add`等)来构建表达式树,最后通过`Expression.Lambda`方法创建Lambda表达式。...

    C# 数据库原码 SharpHSQLCode

    "Select.cs"可能实现了SQL SELECT语句的解析和执行逻辑,而"Expression.cs"可能涉及到了SQL表达式的处理,包括算术表达式、比较表达式、逻辑表达式等,这些都是构建复杂查询的基础。 最后,"Cache.cs"可能涉及...

    .NET元编程配套源代码

    - 使用表达式树进行代码分析和转换 4. **Chapter4**:元编程与AOP - 面向切面编程的概念和应用 - 利用元编程实现拦截器或代理模式 - PostSharp等AOP库的简单介绍 5. **Chapter5**:自定义编译过程 - Roslyn...

    more Effective C# 改善C#的50个具体办法(中文版)

    32. **利用表达式树(Expression Trees)**:表达式树表示代码结构,常用于动态编译和查询语言。 33. **掌握并使用特性反射(Reflection with Attributes)**:通过反射获取和应用特性,实现元编程。 34. **理解并...

    C#设计模式

    在C#中,可以使用表达式树(`Expression Trees`)来实现简单的解释器。 15. **迭代器模式**(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。C#的`IEnumerator<T>`接口就是典型的迭代器...

    如何在C#中构建正则表达式引擎

    1. **正则表达式解析**:这是构建引擎的第一步,需要将字符串形式的正则表达式转化为抽象语法树(AST)。这可以通过递归下降解析器或词法分析器完成,将正则表达式拆分成操作符和原子元素。 2. **NFA/DFA构建**:...

    C#中DataTable 转实体实例详解

    为了提高效率,可以采用委托(Delegate)或表达式树(Expression Tree)。委托可以将转换逻辑封装在一个函数中,这样在遍历过程中只需要执行这个函数,减少了反射带来的开销。例如: ```csharp Func, Usr> func = ...

    提高你c#的50各方法

    36. **表达式树编译器服务**:使用Roslyn API,实现代码生成和分析。 37. **异步局部变量(Async Local Variables)**:了解C# 7.0中引入的异步局部变量,解决异步上下文中的状态管理问题。 38. **异步任务取消**...

Global site tag (gtag.js) - Google Analytics