2010-11-11 22 views

Répondre

1

Voici comment je comprends bien, l'idée de la mise en cache est de réutiliser des expressions chaque fois que possible pour réduire la dynamique vs statique frais généraux de l'évaluation de l'expression dynamique.

imaginer une expression dynamique

>> a + b 

travail Puis ce la première fois une expression/arbre de syntaxe devra être créé (si l'on n'existe pas). Ceci est du type

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

Ceci est essentiellement une règle qui peut être évaluée et si elle est vraie, l'expression peut être utilisée. Nous avons donc un cache de niveau 1.

Niveau 2 est simillar mais une règle plus complexe, probablement le long des lignes de:

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... 

Le niveau 3 est encore plus complexe.

Si aucune expression ne peut être trouvée, une nouvelle expression est créée et ajoutée à l'un des caches (bien que je ne sache rien à ce sujet). Si je comprends bien, il est 1 règle, l2 est d'environ 10 règles et l3 est d'environ 100 règles.

J'ai tout compris en lisant le sujet sur google. - http://dotnetslackers.com/articles/csharp/Dissecting-C-Sharp-4-0-Dynamic-Programming.aspx - http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

et d'autres dont je ne me souviens pas maintenant.