Sounds like a flaw in your development process.
You should test your code after every significant modification, and then, if the performance is bad enough to visibly affect gameplay, you know that you need to fix something in that recently modified/created area. In that case, the problem is usually obvious, and relatively easy to remedy.
You don’t just slug along on a whole bunch of code, only to run it a few days later, and realize: “Oh, wow, this is running so slow - I must be doing something wrong.”. Then it’s much more difficult to narrow it down to one, or maybe a few lines.
All that said: Premature optimization is the root of all evil. You should try to make your algorithms as elegant, and as straightforward as possible, and worry about performance only when it becomes an actual problem.
Although, I profile very rarely, because for real time simulations, you’re either hitting 60 fps, or you’re not, and if you’re not, it’s because of what you just changed.
When I do profile, it’s usually for more complex cases, but even then, it’s only to confirm my initial suspicions, rather than to “find the bottleneck” in the first place.