tiempo por mover eliminar ejecucion dinamicamente crear controles control como codigo botones agregar c# .net code-contracts production

por - eliminar un control en tiempo de ejecucion c#



Contratos de código en tiempo de ejecución (4)

El manual del usuario lo explica con bastante detalle: hay todo tipo de opciones que puede tener. Cada configuración de compilación puede tener diferentes configuraciones para las que los contratos se verifican en el momento de la ejecución, y no es una opción de "todo o nada": puede hacer cumplir todos, algunos o ninguno de los contratos, según la configuración que se puede modificar en Visual Studio.

Hasta donde he leído en pocas palabras, los contratos de código podrían degradar el rendimiento en tiempo de ejecución.

¿Es posible deshabilitar los contratos de código en producción?


En las propiedades de su proyecto, vaya a Contrato de código, seleccione la configuración "Liberar" y desactive la verificación de tiempo de ejecución.


La diferencia de rendimiento es bastante pequeña y no afectará su código de manera notable. A menos que esté desarrollando algún sistema de negociación de acciones en tiempo real, realmente no me preocuparía por eso.

En cuanto a deshabilitar el código en Producción, preferiría tener la protección adicional de los Contratos de Código en lugar de algún posible error oscuro. Un error en el contrato del código le dirá exactamente dónde y por qué se violó el Contrato en lugar de tener que excavar en una pila de llamadas profunda solo porque se pasaron datos erróneos en 5 niveles hasta el árbol de la pila de llamadas.

@svanryckeghem y @Stephen Cleary: Si está usando o planea usar Contract.Requires<TException> y no habilita la ''Comprobación de Contrato en Tiempo de Ejecución'', obtendrá un fallo en el tiempo de ejecución del rewriter de IL (ccrewrite.exe) que necesita Estar vinculado al uso de los Contratos de Código. A continuación, se le solicitará que habilite la Comprobación de contratos en tiempo de ejecución para que esto funcione.

En mi humilde opinión, el uso de Contract.Requires<TException>() es mucho más útil que Contract.Requires() ya que tienes control sobre el tipo de excepción lanzada.


Tengo mis opciones favoritas descritas en mi blog .

Para resumir:

  • En el modo Liberación, recomiendo desactivar Realizar la verificación de contratos en tiempo de ejecución pero seleccionando Construir el ensamblaje de referencia del contrato. Esto colocará las condiciones previas en una dll separada que sus clientes pueden usar opcionalmente (si comprueban que el sitio de llamadas requiere verificación), pero elimina todos los gastos generales si no marcan esa opción.
  • En el modo de depuración, configure Realizar la verificación de contratos en tiempo de ejecución en Completo.

Algunas personas prefieren que las condiciones previas se incluyan en su versión de lanzamiento. Esto es particularmente útil si se distribuye a través de NuGet porque no admiten las dlls de Code Contract . Para mis paquetes de NuGet, estoy migrando hacia la inclusión de condiciones previas en las versiones de lanzamiento, pero también tengo una descarga por separado para una versión de "Versión sin condiciones previas".