It is a managed language, yes. You can work around that with p/invoke and other stuff, but it's rarely useful.
Premature optimization is the root of all evil, as Donald Knuth once said
While you can squeeze out a bit of performance improvement by using non-managed memory management, it also overly complicates your program. It all boils down to what you're trying to accomplish - if your app isn't performance-critical, it's usually easier to just leave all that hassle to the runtime. It's pretty good at it, though not always the best.
If you really need every clock cycle, then sure, C++ (or C) is the way to go
As for Prolog... I'm not a big fan of declarative programming (I almost failed my Prolog class). When it comes to alternative programming paradigms, functional programming (Haskell and Lisp - especially Lisp) is my way to go
Also, somebody said that programming languages are like Pokemon moves - you can only know about 4 really well until you're forced to forget one