我刚听说DLR有一个三级缓存策略..但它是什么..。一个简单的解释和简单的例子将是非常有用的。
谢谢
发布于 2010-11-11 18:13:10
这就是我对它的理解,缓存的想法是尽可能重用表达式,以减少动态表达式求值的动态与静态开销。
想象一个动态表达式
>> a + b
然后在第一次需要创建表达式/语法树时解决这个问题(如果不存在这样的树)。它的类型是
if a is an int and not null and b is an int and not null then result = a + b
这本质上是一个可以求值的规则,如果为真,则可以使用表达式。因此,我们有一个一级缓存。
级别2类似,但它是一个更复杂的规则,可能是这样的:
if a is an int and not null and b is an int and not null then result = a + b
if a is string and b is an int then do Int.Parse(a) + b
etc...
级别3更复杂。
如果找不到表达式,则会创建一个新的表达式,并将其添加到其中一个缓存中(尽管我对此一无所知)。
据我所知,l1是1条规则,l2大约是10条规则,l3大约是100条规则。
这一切都是我在谷歌上围绕这个主题阅读的。- http://dotnetslackers.com/articles/csharp/Dissecting-C-Sharp-4-0-Dynamic-Programming.aspx - http://msdn.microsoft.com/en-us/magazine/cc163344.aspx
还有其他一些我现在想不起来了。
https://stackoverflow.com/questions/4153142
复制相似问题