The main difference between static class/member and non-static class/member is that a static class cannot be instantiated. So we access the members of a static class by using the class name itself. The Singleton is a non-static class that allows only one instance of itself to be created,so it can implement interfaces or derive from useful base classes.
In the using of memory, both static and non-static methods are resident in memory after the first load, and the difference is that non-static methods are reclaimed by GC.
Singleton's two main advantages:(Derive from Implementing Singleton in C#)
Because the instance is created inside the Instance property method, the class can exercise additional functionality (for example, instantiating a subclass), even though it may introduce unwelcome dependencies.
The instantiation is not performed until an object asks for an instance; this approach is referred to as lazy instantiation. Lazy instantiation avoids instantiating unnecessary singletons when the application starts.
In general, singleton has more advantages than static class, use singleton mode if you're good at singletons, and use static class if you're just using a simple tool class.