In Unity things are a bit different, usually this is what I go for when using the singleton design pattern:
- Static class (
MyClass.Foo();) - Used when creating non-Unity related, static functions. A good example would be a static data manager class that stores information about your player throughout the various scenes.
- Mono/Singleton class inheritence (
MyClass.Instance.Foo();) - Used when creating a static class that lives in the "Unity lifecycle", for example when you want to use MonoBehaviour's event functions (Update, Awake, etc) or using Unity's coroutines, etc.
I've written a short blog post about my custom modified MonoSingletone which can also live through scenes:
Regarding performance, both classes can easily work and get called hundreds of time per frame even on mobile devices - so it's definitely a question of the right tool for your specific problem.