Differences:
- Debug inserts NOPs (No-operation CPU instructions) between useful CIL code in order to allow debugger attachment
- Debug does not allow various optimizations:
- Inlining (placing a method's code in place of a call to it in order to reduce call overhead)
- Loop unrolling (replacing a loop code - such as a for - with the repeated code to eliminate loop overhead (loop variable maintenance))
And many others. Release is sensibly faster, but it offers no real debug support. For debugging there is... the debug mode :)