How about "avoid both"? Singletons and static classes:
- May introduce global state
- Get tightly coupled to multiple other classes
- Hide dependencies
- Can make unit testing classes in isolation difficult
Instead, look into Dependency Injection and Inversion of Control Container libraries. Several of the IoC libraries will handle lifetime management for you.
(As always, there are exceptions, such as static math classes and C# extension methods.)