我刚才听说DLR有三级缓存策略..但它是什么......用简单的例子做一个简单的解释会非常有帮助。
由于
答案 0 :(得分:1)
这就是我的理解,缓存的想法是尽可能重用表达式来减少动态表达式评估的动态和静态开销。
想象一个动态表达
>> 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
和其他一些我现在不记得了。