Un primer paso es hacer un profiling de los distinto módulos de la aplicación para ver en que parte se esta usando el tiempo de procesamiento.
Lo ideal es hacer un profiling de cada módulo aislado y optimizar ahí. Pero también es importante un profiling en conjunto de toda la aplicación funcionando pues pueden surgir otros problemas durante el uso habitual.