Malentendido de los árboles de expresión compilados?

Tengo esta expresión:

Expression<Func<string, bool>> f = s => s.Length < 5;

ParameterExpression p = Expression.Parameter (typeof (string), "s");
MemberExpression stringLength = Expression.Property (p, "Length");
ConstantExpression five = Expression.Constant (5);
BinaryExpression comparison = Expression.LessThan (stringLength, five);
Expression<Func<string, bool>> lambda= Expression.Lambda<Func<string, bool>> (comparison, p);

// lets: prueba

Func<string, bool> runnable = lambda.Compile();
Conso,le.WriteLine (runnable ("kangaroo")); // False
Console.WriteLine (runnable ("dog")); //True

Quiero preguntar sobre el.Compile()

¿Qué compila? ¿Y cuál es la diferencia entre la primera ejecución y las ejecuciones posteriores ...?

Compile debería ser algo que suceda una vez y no vuelva a suceder más tarde ...

¿Qué / cómo me ayuda?

Respuestas a la pregunta(6)

Su respuesta a la pregunta