6

Estoy trabajando en nuestro sistema de integración continua, y estoy interesado en simular el manejo de nuestros sistemas de tiempos de compilación inesperadamente largos. ¿Hay alguna manera de hacer que la compilación tome mucho tiempo para completarse? ¿O tal vez forzarlo a una especie de bucle que tomaría una gran cantidad de tiempo para compilar? Estoy buscando algo tan fácil como Thread.Sleep() solo en la compilación en lugar de en la ejecución.¿Es posible escribir código que provocará largos tiempos de compilación?

¿Qué le parece usar las directivas de preprocesador?

¿Alguna idea?

+13

¿Usa la metaprogramación de plantillas y C++ con plantillas locamente recursivas? –

+4

Convierte ese comentario en una respuesta porque entonces podría votarlo correctamente. –

+0

Pruebe la función ackermann en el código de la plantilla. Factorial in o (n!) También podría funcionar bien. – BCS

Respuesta

9

Aquí hay un MSBuild sleep task que debería hacer el truco. Llámelo desde el objetivo BeforeBuild en su archivo .csproj, o wherever is appropriate para su necesidad.

MSBuild Community Tasks también tiene una tarea de reposo, por lo tanto, continúe con eso si necesita usar algunas de sus otras tareas, que me han resultado muy útiles.

7

Obviamente, la tarea de dormir es el camino a seguir. Pero si le interesan las formas de hacer que el compilador de C# sea arbitrariamente largo, para su información es posible codificar problemas en el código fuente que fuerza al algoritmo de resolución de sobrecarga a ejecutar un algoritmo O (n^m). Elija n y m lo suficientemente grandes y puede hacer que el compilador haga todo el trabajo que desee.

Aquí está mi artículo sobre ese tema si le interesa.

http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx

+0

¡Impresionante! Gracias por la gran información. –

2

tuve un compañero de trabajo una vez que escribió una sentencia switch 16000 línea. Tomó una eternidad compilar, y luego cuando lo expandió un poco más, realmente rompió el compilador. Sin embargo, de alguna manera no estoy seguro de que eso es lo que tenías en mente.

Cuestiones relacionadas