¿Debería colocarse Marshal.FreeHGlobal en un bloque finalmente para garantizar que se eliminen los recursos?

Tengo el siguiente bloque de código:

IntPtr unmanagedPointer = Marshal.AllocHGlobal(buffer.Length);
Marshal.Copy(buffer, 0, unmanagedPointer, buffer.Length);
SomeCommandThatCanThrowAnException();
Marshal.FreeHGlobal(unmanagedPointer);

Si el bloque se envuelve en un intento, y el comando FreeHGlobal se coloca en un bloque finalmente. (En caso de que el comando central arroje una excepción).

Parece tener sentido que finalmente evitaría pérdidas de memoria en este caso, sin embargo, a partir de ejemplos que he encontrado en línea, finalmente no se usa. Quizás los recursos se eliminen automáticamente de todos modos (aunque no estén administrados).

Respuestas a la pregunta(2)

Su respuesta a la pregunta