L’expression fournie à Debug.Assert sera-t-elle évaluée dans une version validée?

Disons que j’ai une affirmation plutôt chère:

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

Si je teste cette affirmation avec:

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

Est-ce que IsCompatible sera exécuté dans les builds de release?

D’après ce que je comprends, Debug.Assert étant marqué comme [Conditionnel (“DEBUG”)], ses appels ne seront émis que dans les versions de débogage. Je pense que cela n’empêchera pas l’expression d’être évaluée en mode de publication, car l’appel de la méthode peut avoir des effets secondaires, seul le passage du résultat à Debug.Assert ne serait pas émis. Est-ce exact?

Devrais-je faire:

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

Pour m’assurer que je ne paie pas le coût de IsCompatible en mode publication?

Non.

Debug.Assert est décoré avec [Conditional("DEBUG")] .

Lorsque le compilateur comstack un appel à cette méthode, il supprime la totalité de cette instruction, sauf si DEBUG est défini dans le projet appelant.