Why profile?
Trying to make your code faster (or use less memory), without first understanding which parts are slow (or use too much memory), is a guessing game.
The end result is often wasted effort optimising code that doesn't actually result in a significant change in the overall performance.
For example, if one function is responsible for 90% of the execution time, then it's probably a waste of time optimising anything else in the codebase.
Without profiling, attempting to improve performance can be very inefficient.