There isn't such thing as 'best obfuscator'. And it's certainly not a matter of money, i.e., it doesn't mean that only lot of cash can provide true protection.
Since a lot of guys are talking about products, and name products, I'll tell you about my experience.
I have tested about 10 obfuscators with my projects (scientific class libraries, lots of generics, generic interfaces, etc...) before I buy one and many of the expensive and famous obfuscators failed:
- Dotfuscator (found a serious bug - they couldn't do anything to fix it, though I sent them some source files to reproduce the bug)
- CodeVeil (crashed or produced assemblies that crashed at run time, and pretty damn slow!)
- XenoCode (crashed or produced assemblies that crashed at run time, not so often as CodeVeil did!)
- smartassembly (crashed; could not even produce assemblies)
- ...
I didn't have the opportunity to test some other products (like one from Arxan) because the price they asked was ridiculous (the price was $15000, initially, and dropped to half when I told them I was not interested - they had two salesmen keep sending emails at me; guess who was going to pay for their bills...).
Finally I purchased two of the obfuscators that were at the bottom of my list and cost less than $400 (each). I didn't believe they worth of any value because of their small cost. I realize now that they were simply cost-effective solutions. They didn't crash at all, they did what they were supposed to do fast (unlike CodeVeil, which is so slow...) and save me a lot of money...