Obtenga miembros de un grupo de Active Directory de forma recursiva, es decir, incluidos subgrupos

Dado un grupo como este en Active Directory:

MainGroup
  GroupA
    User1
    User2
  GroupB
    User3
  User4

Puedo determinar fácilmente si User3 es miembro de MainGroup o cualquiera de sus subgrupos con un código como este:

using System;
using System.DirectoryServices;

static class Program {
    static void Main() {
        DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
        string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y");
        DirectorySearcher searcher = new DirectorySearcher(user, filter);
        searcher.SearchScope = SearchScope.Subtree;
        var r = searcher.FindOne();
        bool isMember = (r != null);
    }
}

Me gustaría saber si hay una forma similar de obtener todos los usuarios que son miembros de un grupo o cualquiera de sus subgrupos, es decir, en el ejemplo de MainGroup, obtenga User1, User2, User3 y User4.

La forma obvia de obtener todos los usuarios es consultar recursivamente cada subgrupo, pero me preguntaba si hay una manera más fácil.

Usando el mismo enfoque con elmemberOf:1.2.840.113556.1.4.1941: filtrar, pero no es factible utilizar la raíz del dominio en lugar del usuario como base de búsqueda, ya que la consulta lleva demasiado tiempo (probablemente calcula todas las membresías de grupo de forma recursiva para todos los usuarios en el dominio y comprueba si son miembros del grupo dado )

¿Cuál es la mejor manera de obtener todos los miembros de un grupo, incluidos sus subgrupos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta