It's great that .NET provides object-oriented components that implement and hide complex bits of functionality, but the underlying operating system can be in no way object oriented and can cause problems when you try to optimize your .NET applications.