The problem with Singleton services (the problem that you are experiencing) is caused by the fact that those services will be active and stored in memory as long as the application works, while with a non-Singleton you can use the OnDestroy()
lifecycle hook and garbage collect stuff to clean the memory.
That being said, if a service needs to be a singleton, it needs to be a singleton.
This is a pattern that is used in every programming language.
If you misuse (or abuse) the pattern, the app is going to be slower for sure.
For example, if you need a service only in a module, you should declare the service in the module level (in the provider's array of the module) and not as a singleton.
If you can use multiple instances of a service (aka you don't need to share the same instance between different components), then don't use a singleton.
But if you really need a singleton, there is no other choice.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…