我如何把这种代码转换成表达式树?

我有一个散列方法,其操作取决于输入到该函数。 剖析该计划表明,太多的时间花在评估该散列法。 我想试着将其更改为一个表达式树,所以内循环检查,可以做一次。 希望这会更快,但我会学习表达式树两种方式。

这里是函数(我解开了例如一些明显的优化,并拿出任何输入验​​证)的一个简化版本:

Private Function Checksum(ByVal inputValues As IEnumerable(Of UInt32), ByVal declarations As IEnumerable(Of String), ByVal statements As IEnumerable(Of String)) As UInt32 Dim variables = New Dictionary(Of Char, UInt32) For Each declaration In declarations 'parse declaration (eg. "X=52")' variables(declaration(0)) = UInt32.Parse(declaration.Substring(2)) Next declaration For Each value In inputValues '"I"nput' variables("I"c) = value For Each statement In statements 'parse statement (eg. "X=Y+Z")' Dim varResult = statement(0) Dim valueLeft = variables(statement(2)) Dim operand = statement(3) Dim valueRight = variables(statement(4)) 'execute statement' Dim valueResult As UInt32 Select Case operand Case "+"c : valueResult = valueLeft + valueRight Case "-"c : valueResult = valueLeft - valueRight Case "*"c : valueResult = valueLeft * valueRight Case "&"c : valueResult = valueLeft And valueRight Case "|"c : valueResult = valueLeft Or valueRight Case "^"c : valueResult = valueLeft Xor valueRight End Select variables(varResult) = valueResult Next statement Next value '"O"utput' Return variables("O"c) End Function

我想创建一个函数,它接受了宣言和声明,并输出表示一个函数,它接受UInt32的的IEnumerable和返回一个UInt32的一个专门的表达式树。



跟进:

我成功了,并且加速是荒谬的 (一个数量级)。 主要的事情,我必须学习的地方:

  • 使用Expression.Lambda和Expression.Compile得到一个代表,你可以实际使用。
  • 该Expression.Block工厂方法有一个“变量”参数,您(实际上)用于声明当地人。 同样,Expression.lambda有“参数”。
  • 如果你打电话Expression.Parameter两次,你在处理两个不同的变量(即使他们的名字是一样的)! 存储结果以备后用。 相同的标签,等等。
  • 一个BlockExpression的结果是在该块中的最后一个表达式。

--------------解决方案-------------

有有VS 2010 RC一个文档更新。 我已经添加了新的ET API的一些例子在这里:http://msdn.microsoft.com/en-us/library/bb397951(VS.100).aspx它展示了如何创建局部变量和如何执行表达式树。 实例是在VB和C#。

但说实话,我还是不明白你在做什么。 为什么你的声明和说明进来的字符串? 这OpToExp功能也是一个谜给我。 你是如何设法让操作数为表达式,但操作(你所说的“操作”出于某种原因)为char? 如果你提供你正在努力做的更多的信息和系统的整体设计,我可以帮助你更好的。

分类:。净 时间:2015-03-15 人气:3
本文关键词: .NET,vb.net,表达式树
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.250 (s). 10 q(s)