You have been misinformed, but the outcome on your actual code probably won't change either way. The exception handling system in .NET is actually quite fast, meaning its performance is comparable to you other options for error handling. However, like mentioned in another answer, you only want to use exceptions appropriately - i.e. only for exceptional situations which you do not expect to occur during a normal run of your application. The reasons for this are as follows:
- Analyzing code flow involving exceptions is more complicated than code not involving exceptions, so your "normal" code should avoid throwing exceptions.
- The Visual Studio debugger will report every time an exception is thrown. It's only one line in the output window, but if you are misusing exceptions then this wonderful feature will quickly turn into a nightmare.
- Visual Studio has the ability to break when a particular type of exception is thrown. If you consistently use exceptions correctly (for their intended purpose, and only for indicating an actual exception of that type), this feature provides a way to quickly debug errors in your application related to error handling (recovery, reporting, etc.).
When it comes to handling actual exceptional situations, exception handling actually provides a performance benefit over other things like returning error codes. When it comes to branch prediction and hinting, the JIT can make the assumption that code will never throw an exception, allowing it to generate code that effectively uses any available branch prediction features of your processor to avoid branching overhead for code that includes error handling features but is not actively handling an error.