Choosing the right data structures and algorithms
Object orientation is all about having the data and the operations on that data together in a cohesive and loosely coupled structure. That is what classes and structs do: they combine the two. This way, you can define your data structures in a way that makes sense concerning the system’s functionality.
But when speaking about performance, other factors come into play. Having static classes is usually a code smell that you must avoid. However, they’re fast. You don’t need to instantiate something, resulting in that costly call to allocate heap memory. And that memory doesn’t need to be cleaned by the garbage collector later.
Of course, if you have member variables for that class, you might as well instantiate it. Ultimately, all that happens is that those variables end up on the heap (with a little bit of housekeeping). The methods themselves are part of your application code and are stored differently...