Lo que tienes que ver es cuál es el proceso que tarda.
Supongo que al iniciar, abres la base de datos, luego abres varias tablas y luego generas alguna consulta y finalmente pides usuario y contraseña (o lo que sea que haga tu aplicación).
En estos casos, lo que yo hago es pasar con F8 por cada paso y ver cual es el que tarda.
Otra forma, cuando tengo que hacerlo con los datos del cliente y no me puedo traer su base es crear un log.
Yo lo hago más o menos así:
Código Delphi
[-]
var
ts : TStrings;
begin
ts := TStringList.Create;
ts.Add('Inicio: ' + DateTimeToStr(Now));
AbreDataBase;
ts.Add('AbreDataBase: ' + DateTimeToStr(Now));
AbreTabla1;
ts.Add('AbreTabla1: ' + DateTimeToStr(Now));
AbreTabla2;
ts.Add('AbreTabla2: ' + DateTimeToStr(Now));
AbreTabla3;
ts.Add('AbreTabla3: ' + DateTimeToStr(Now));
GeneraEntrada;
ts.Add('GeneraEntrada: ' + DateTimeToStr(Now));
ts.SaveToFile('tiempos.log');
ts.Free;
...
end;
Me ha sucedido que mis programas, a medida que se utilizan, las aperturas son más lentas. La solución es abrir solo lo necesario para iniciar la aplicación y abrir los datos necesarios para cada Form cuando se necesiten.