Una aclaración.
El administrador de tareas es relativamente una mala idea para ver el consumo de memoria. Esto se debe a la forma en la que la memoria se asigna y libera en Windows. Puede ocurrir (de hecho es prácticamente 100% del tiempo) que vos liberes la memoria desde tu programa, pero que realmente no se esté liberando por el sistema de memoria que usa Windows.
Lo más seguro creo que sería usar FastMM. Que es un manejador de memoria muy potente que, entre otras cosas, te dice cuando hay goteos de memoria. Si estás usando, creo recordar, versiones anteriores a Delphi 2010, podés agregarlo a la uses de tu DPR y listo (y preparate para llevarte una sorpresa
). En D2010 creo que ya viene incorporado así que no hay necesidad. Sólo tendrías que habilitarlo (supongo).
Otra cuestión, no pusiste el código que estás usando para liberar la memoria antes de crear un nuevo frame... Quizás está ahí el problema.
Saludongos.