I’ve read many times that catching an exception is expensive, so it should be avoided when possible. For example, instead of trying to cast/convert an object and catch the InvalidCastException, instead see if there is a built-in way.
For example, most of the value types in the .NET framework have a TryParse() and Parse(). Well, see this blog post, they go into a good amount of detail about how there isn’t much different performance-wise if all goes well; but if there is an exception, the difference becomes HUGE performance-wise! This is a good read: