Will the expression provided to Debug.Assert be evaluated in a release build?
Asked Answered
R

1

8

Say I have a rather expensive assertion:

bool IsCompatible(Object x, Object y) { 
  // do expensive stuff here
}

If I test this assertion with:

Debug.Assert(IsCompatible(x,y));

Will IsCompatible be executed in release builds?

My understanding is that Debug.Assert being marked as [Conditional("DEBUG")], calls to it will only be emitted in debug builds. I'm thinking that this won't prevent the expression from being evaluated in release mode though, since the method call may have side effects, only the passing of the result to Debug.Assert wouldn't be emitted. Is that correct?

Should I be doing:

#if DEBUG
Debug.Assert(IsCompatible(x,y));
#endif

To ensure that I don't pay the cost of IsCompatible in release mode?

Rum answered 14/11, 2012 at 17:7 Comment(0)
A
12

No.

Debug.Assert is decorated with [Conditional("DEBUG")].

When the compiler compiles a call to this method, it will remove that entire statement unless DEBUG is defined in the calling project.

Aili answered 14/11, 2012 at 17:8 Comment(1)
+1. Note that it is true unless one goes and adds DEBUG to release configuration.Hardener

© 2022 - 2024 — McMap. All rights reserved.