¿Cómo puedo mejorar el rendimiento de mis expresiones cuando estas contienen un gran número de nodos hermanos?
Las expresiones con lógica relativa a hermanos como Node.Siblings.Any(SiblingNode.Properties.Boolean Prop)
pueden provocar incidencias de rendimiento si hay muchos hermanos. Este se debe a que cada nodo tiene un conjunto de hermanos único. Por ejemplo, para un nodo superior con los hijos A, B, C, D y E, el nodo A tiene los hermanos B,C,D,E, y el nodo B tiene los hermanos A,C,D,E, etc.
Un mejor modo de construir la expresión es crear la propiedad a la que hará referencia en el padre utilizando los hijos y, después, haciendo referencia a esa propiedad en el nodo. Por ejemplo, puede crear una propiedad denominada ChildrenBooleanSet con la expresión Node.Children.Any(ChildNode.Properties.Boolean Prop)
y, después, hacer referencia a esa propiedad en el nodo: Node.Parent.Properties.ChildrenBooleanSet
.
Este tipo de expresión mejora el rendimiento porque el valor del padre se puede almacenar en caché.
Caution:
Tenga en cuenta que con la expresión de ejemplo anterior, los hijos incluirán el nodo en sí, mientras que no lo harán los hermanos. Puede agregar una lógica adicional para filtrar el nodo, si es necesario.