Что такое стратегия трехуровневого кэширования DLR? - PullRequest
1 голос
/ 11 ноября 2010

Я только что услышал, что у DLR есть трехуровневая стратегия кэширования. Но что это такое? Простое объяснение с простым примером будет очень полезно.

Спасибо

1 Ответ

1 голос
/ 11 ноября 2010

Вот как я понимаю, идея кэширования состоит в том, чтобы повторно использовать выражения везде, где это возможно, чтобы уменьшить динамические и статические издержки при оценке динамических выражений.

представьте себе динамическое выражение

>> a + b

Затем в первый раз, когда нужно будет создать дерево выражений / синтаксиса (если оно не существует). Это типа

if a is an int and not null and b is an int and not null then result = a + b

Это, по сути, правило, которое можно оценить, и если оно истинно, можно использовать выражение. Следовательно, у нас есть кэш 1-го уровня.

Уровень 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 правил.

Я получил все это от прочтения этой темы в Google. - http://dotnetslackers.com/articles/csharp/Dissecting-C-Sharp-4-0-Dynamic-Programming.aspx - http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

и некоторые другие, которые я сейчас не могу вспомнить.

...