In C# / .NET (unlike C++ DLLs) it is generally not an issue. Debug and Release are near identical and there are no memory-management issues (as there would be with C++ DLLs).
The following is from jaybaz's blog:
There are 3 things people typically identify as the difference between debug & release. You need to decide which one you’re interested in:
“DEBUG” preprocessor flag. Can be set on the whole assembly/netmodule with ‘csc /define’, or on a whole file with #define.
Debugging information (pdb). Set with ‘csc /debug[+|-]’. It doesn’t affect codegen, so it’s really not very interesting.
Optimization. Set with ‘csc /optimize[+|-]’. In managed code, the JITter in the runtime does nearly all the optimization. The difference in generated IL from this flag is pretty small. The Whidbey C# compiler has more a difference on this flag than previous versions, but it’s still not much.